跨机器生成CSR经本地CA签名后openssl验证失败问题咨询
解决openssl验证服务器证书时的"unable to get local issuer cert"错误
让我来帮你捋清楚这个问题,你看到的两个错误其实一个是正常提示,一个才是验证失败的根源:
先搞懂错误含义
- 错误18(self signed certificate OK):这个完全不用慌——你自己搭建的CA根证书本身就是自签名的,OpenSSL只是在告诉你“这个证书是自己签自己的”,最后那个
OK已经说明CA证书本身是有效的,这是自建CA的正常状态。 - 错误20(unable to get local issuer cert):这才是验证失败的关键。你之前的命令写法不对,直接把CA证书和服务器证书丢在
openssl verify后面,OpenSSL不会自动把这个CA证书当作信任锚来验证服务器证书,它找不到服务器证书的颁发者(也就是你的CA)在信任列表里,所以报错。
解决步骤
1. 使用正确的验证命令
你需要用-CAfile参数明确指定信任的CA证书,让OpenSSL用它来验证服务器证书:
openssl verify -CAfile /root/tmp/tmp/cacert.pem /root/tmp/servercert105.pem
执行这个命令后,如果服务器证书确实是由你的CA签名的,应该会输出/root/tmp/servercert105.pem: OK。
2. 额外排查(如果还是失败)
如果上面的命令还是报错,你需要检查两个关键点:
- 确认颁发者一致性:服务器证书的颁发者必须和CA证书的主体完全一致。用下面的命令分别查看:
这两个输出的内容必须完全匹配,否则说明服务器证书不是由这个CA签名的,自然验证不通过。# 查看CA证书的主体信息 openssl x509 -noout -subject -in /root/tmp/tmp/cacert.pem # 查看服务器证书的颁发者信息 openssl x509 -noout -issuer -in /root/tmp/servercert105.pem - 检查证书有效性:确认服务器证书没有过期,并且扩展用途符合服务器证书的要求(比如要有
TLS Web Server Authentication):openssl x509 -noout -text -in /root/tmp/servercert105.pem | grep -A 3 "X509v3 Extended Key Usage"
总结
核心问题就是之前的验证命令没有正确指定信任的CA证书,改用-CAfile参数就能让OpenSSL用你的自建CA来验证服务器证书,再配合检查颁发者一致性,就能解决这个验证失败的问题。
内容的提问来源于stack exchange,提问作者TechJump
相关产品推荐
相关产品推荐

