You need to enable JavaScript to run this app. 使用多份颁发者证书执行openssl verify验证失败问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用多份颁发者证书执行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

验证修复结果

修复后两个验证操作均可正常通过:

  1. 完整证书链验证
openssl verify -verbose -CAfile <(cat ica.crt ca.crt) server.crt

返回结果:server.crt: OK

  1. 部分证书链验证
openssl verify -verbose -no-CAfile -no-CApath -partial_chain -trusted ica.crt server.crt

返回结果:server.crt: OK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:54:04