我有另一台机器生成的CSR,我使用本地CA设置将CSR用于CA签名。我执行时
openssl verify /root/tmp/tmp/cacert.pem /root/tmp/servercert105.pem
/root/tmp/tmp/cacert.pem: C = US, ST = CA, L = orris, O = HOLO, OU = Nt, CN = x.x.x.x, emailAddress = nh@hl.com error 18 at 0 depth lookup:self signed certificate OK /root/tmp/servercert105.pem: C = US, ST = CA, L = Morris, O = CM, OU = 3009, CN = 0000010 error 20 at 0 depth lookup:unable to get local issuer certificate
openssl verify -CAfile /root/tmp/tmp/cacert.pem /root/tmp/servercert105.pem
/root/tmp/servercert105.pem:好的
这是root签名的,没有中间证书。我在没有-CAfile选项的情况下尝试过这个预期的错误吗?
答案 0 :(得分:0)
是。
执行openssl verify -CAfile x y
时,意味着:
由于您的servercert105由(1)您的cacert签名,因此成功。
(1)从技术上讲,子CA通过父CA的私钥进行签名,并通过与私钥匹配的父CA的证书进行验证,父证书本身也经过验证或明确信任。我们通常通过说孩子是由父证书签名来简化这一点。
执行openssl verify x y
时,意味着:
首先,使用系统默认信任库验证文件x中的(单个或第一个)证书
然后,使用系统默认信任库验证文件y中的(单个或第一个)证书
这些步骤是独立且独立的。显然,您的默认信任库没有安装cacert,所以:
验证针对默认信任库自签名的cacert失败,因为它不在信任库中,因此验证错误18
针对默认信任库验证servercert105失败,因为其父级不在信任库中,因此验证错误20