使用CMP客户端向FortiAuthenticator申请证书时遇'missing protection'错误
关于FortiAuthenticator CMP "missing protection" 错误的解析与解决方案
错误含义
"missing protection" 是CMP协议的标准错误,指你的初始注册请求(IR)未提供FortiAuthenticator(FAC)要求的请求保护机制。CMP协议中的"protection"用于确保请求的真实性、完整性,防止篡改或伪造,常见实现方式包括预共享密钥签名、客户端证书签名、HTTP层认证等。
结合你提到的「设备事前互不了解」的初始注册场景,FAC默认会要求请求携带合法的保护措施,否则直接拒绝。
可能原因与对应解决方案
1. FAC未开启允许无保护请求
即使客户端添加了-unprotected_requests参数,若FAC的CMP服务器配置未开启对应权限,仍会触发错误。
- 操作步骤:
登录FAC后台 → 进入Certificate Management > CMP > CMP Servers → 编辑目标CMP服务器配置 → 找到「Security Settings」区域 → 勾选Allow unprotected requests(针对初始注册场景)→ 保存后重试请求。
2. 预共享密钥(PSK)配置不匹配
你尝试用-secret传入密钥,但需确保两端配置完全一致:
- 确认FAC中Certificate Management > CMP > Enrollment Requests里创建的注册请求,其「Shared Secret」与客户端传入的
xpbftSv4完全一致(注意大小写、特殊字符); - 必须添加
-recipient参数,值为FAC的CMP服务器证书DN(可通过openssl x509 -in 服务器证书文件 -noout -subject命令获取)。
修正后的命令示例:
openssl cmp -cmd ir -server http://192.168.1.99/app/cert/cmp2/ -subject /C=Country/ST=State/L=City/O=Company/CN=PFC200/emailAddress=placeholder@company.com -newkey key.pem -certout cert.pem -recipient "/CN=FAC-CMP-Server-DN" -secret pass:xpbftSv4
3. 客户端签名保护配置错误
使用自签名证书时,需明确指定用该证书对请求签名,而非仅传入密钥:
openssl cmp -cmd ir -server http://192.168.1.99/app/cert/cmp2/ -subject /C=Country/ST=State/L=City/O=Company/CN=PFC200/emailAddress=placeholder@company.com -newkey key.pem -certout cert.pem -signer self-signed-cert.pem -signkey self-signed-key.pem
同时需在FAC的CMP服务器配置中,将该自签名证书添加至「Trusted Clients」列表,或开启允许未知客户端的签名请求。
4. 未使用HTTPS提供传输层保护
你当前使用http://协议,FAC可能要求必须通过HTTPS提供传输层保护。尝试修改服务器地址为https://,若FAC服务器证书为自签名,需添加-cacert参数指定FAC的CA证书以验证服务器身份:
openssl cmp -cmd ir -server https://192.168.1.99/app/cert/cmp2/ -subject /C=Country/ST=State/L=City/O=Company/CN=PFC200/emailAddress=placeholder@company.com -newkey key.pem -certout cert.pem -cacert FAC-CA.pem -unprotected_requests
额外排查建议
- 检查FAC系统日志:进入System > Log & Reports > System Logs,过滤「CMP」关键词,可能会找到更详细的拒绝原因(之前未找到可能是过滤条件有误);
- 确认OpenSSL版本:建议使用1.1.1及以上版本,旧版本CMP客户端可能存在兼容性问题。
内容的提问来源于stack exchange,提问作者Darius
相关产品推荐
相关产品推荐

