使用-trusted选项时EJBCA CMP初始化请求(IR)失败求助
CMP客户端使用
-trusted选项时出现"missing protection"错误的原因分析 问题现象
- 使用
-srvcert选项时,CMP所有操作均正常执行 - 使用
-trusted选项时,CMP客户端输出报错:
CMP info: sending IR CMP info: received IP CMP info: sending CERTCONF CMP info: received PKICONF CMP error: missing protection
EJBCA Docker日志错误信息
2024-09-28 14:29:39 INFO [org.ejbca.ui.web.protocol.CmpServlet] (default task-5) CMP message received from: 172.20.0.1, for CMP alias: 3gpp ...some info msg in between... ERROR [org.ejbca.core.protocol.cmp.ConfirmationMessageHandler] (default task-5) Exception during CMP response signing: No alias found for key purpose 1: com.keyfactor.util.keys.token.CryptoTokenOfflineException: No alias found for key purpose 1
环境说明
CA架构:以management-ca作为根CA,由其签发的sub-ca负责处理CMP服务器请求
已尝试的无效操作
- 重新创建加密令牌(cryptotoken)
- 确保令牌已激活
- 确保两个CA均已激活
- 确保令牌包含签名密钥(SignKey)
- 确保签名密钥已正确映射至CA
- 重启Docker容器
- 修改多种“CMP响应配置”选项
- 修改“证书确认”设置
- 切换用于签发证书的CA(management-ca/sub-ca)
- 确认
-trusted选项已传入正确的信任锚(否则会出现其他错误)
问题根因
日志中的No alias found for key purpose 1是核心线索——key purpose 1对应CMP响应签名的密钥用途。问题本质是:
当使用-trusted选项时,CMP客户端要求响应必须由信任锚(根CA或sub-ca)签名保护,此时EJBCA会尝试调用CA的专用签名密钥生成带保护的PKICONF响应,但负责CMP的sub-ca加密令牌中,未配置Key Purpose 1对应的有效密钥别名映射,导致无法找到可用签名密钥,最终客户端因接收不到带保护的响应,抛出missing protection错误。
而使用-srvcert选项时,客户端仅验证服务器证书,EJBCA可能使用服务器证书密钥完成签名,或无需严格的信任锚级签名保护,因此操作正常。
修复步骤
- 登录EJBCA管理界面,定位到负责CMP的
sub-ca的加密令牌配置页面 - 在「密钥别名映射(Key Alias Mappings)」区域,确认存在
Key Purpose 1对应的密钥别名,且该密钥为CA的有效签名密钥 - 若未配置,添加映射:选择
Key Purpose 1,关联令牌中已有的CA签名密钥别名 - 确认该密钥状态为可用(未过期、未撤销、加密令牌在线)
- 保存配置后,重新测试CMP客户端的
-trusted操作
额外注意:需确保sub-ca的签名密钥证书扩展中包含数字签名用途,且EJBCA已正确识别该密钥用途。
内容的提问来源于stack exchange,提问作者Darius
相关产品推荐
相关产品推荐

