使用多份颁发者证书执行openssl verify验证失败问题咨询
问题根因
你生成的中间CA证书(ica.crt)缺少CA属性标记扩展,OpenSSL默认禁止不具备CA权限的证书签发下级证书,这是两次验证均返回error 24 at 1 depth lookup: invalid CA certificate的根本原因。
你签发ica.crt时仅添加了SAN(使用者备用名称)扩展,没有添加basicConstraints = CA:TRUE这个核心扩展,也没有配置用于签发证书的密钥用途扩展,因此OpenSSL识别到ica证书不具备签发下级证书的权限,直接判定其为无效CA证书。
你可以执行以下命令确认问题:
openssl x509 -in ica.crt -noout -text | grep -A 10 "X509v3 extensions"
输出结果中不会出现X509v3 Basic Constraints: CA:TRUE这一行,即可确认问题。
另外你之前用openssl verify -verbose -CAfile ca.crt ica.crt验证通过的原因是:该操作仅校验ica证书的签名是否由ca.crt签发,不会校验ica本身是否具备CA权限,只有当ica作为上级证书验证下级证书时才会触发该检查。
修复方案
重新签发ica.crt,在扩展配置中加入CA相关属性,将原来签发ica的命令替换为以下内容:
openssl x509 \ -req \ -in ica.csr \ -CA ca.crt \ -CAkey ca.key \ -CAcreateserial \ -days 365 \ -extfile <(printf "basicConstraints = CA:TRUE\nkeyUsage = digitalSignature, keyCertSign, cRLSign\nsubjectAltName=DNS:localhost,DNS:*.localhost") \ -out ica.crt
验证修复结果
修复后两个验证操作均可正常通过:
- 完整证书链验证
openssl verify -verbose -CAfile <(cat ica.crt ca.crt) server.crt
返回结果:server.crt: OK
- 部分证书链验证
openssl verify -verbose -no-CAfile -no-CApath -partial_chain -trusted ica.crt server.crt
返回结果:server.crt: OK
内容的提问来源于stack exchange,提问作者subtleseeker
相关产品推荐
相关产品推荐

