You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用-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可能使用服务器证书密钥完成签名,或无需严格的信任锚级签名保护,因此操作正常。

修复步骤

  1. 登录EJBCA管理界面,定位到负责CMP的sub-ca的加密令牌配置页面
  2. 在「密钥别名映射(Key Alias Mappings)」区域,确认存在Key Purpose 1对应的密钥别名,且该密钥为CA的有效签名密钥
  3. 若未配置,添加映射:选择Key Purpose 1,关联令牌中已有的CA签名密钥别名
  4. 确认该密钥状态为可用(未过期、未撤销、加密令牌在线)
  5. 保存配置后,重新测试CMP客户端的-trusted操作

额外注意:需确保sub-ca的签名密钥证书扩展中包含数字签名用途,且EJBCA已正确识别该密钥用途。

内容的提问来源于stack exchange,提问作者Darius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:33:21