我正在使用OpenSSL验证自定义PKI中的签名代码。如何验证证书层次结构中每个节点的CRL。
我的层次结构是:RootCA-> SubCA1-> SubCA2-> EndUser。我可以验证一个深度链的CRL:
~/$ cat RootCA.crl.pem RootCA.pem > RootCA.chain.pem
~/$ openssl verify -check_crl -CAfile RootCA.chain.pem SubCA1.pem
CN = SubCA1
SubCA1.pem: OK
但是,当我尝试通过多个subCA实现同一目标时,CRL验证f失败:
~/$ cat RootCA.crl.pem RootCA.pem > RootCA.chain.pem
~/$ cat SubCA1.crl.pem SubCA1.pem > SubCA1.chain.pem
~/$ openssl verify -check_crl -CAfile RootCA.chain.pem -untrusted SubCA1.chain.pem SubCA2.pem
CN = SubCA1
error 3 at depth 0 lookup: unable to get certificate CRL
error SubCA2.pem: verification failed
是否可以实现CRL的这种多深度验证?我也尝试过使用-check_crl_all,但是它给出了相同的错误。
答案 0 :(得分:0)
根据https://raymii.org/s/articles/OpenSSL_manually_verify_a_certificate_against_a_CRL.html 检查证书层次结构中除根CA之外的每个节点的输出,因为它是自签名的,并且自签名不包含CRL。
openssl x509 -noout -text -in SubCA2.pem | grep -A 4 'X509v3 CRL Distribution Points'
它应该显示类似
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl
否则您的SSL证书很可能不包含CRL网址,很可能是自签名证书。
如果您使用pem文件将以上输出存储在CRl中,
wget -O crl.der http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl
openssl crl -inform DER -in crl.der -outform PEM -out crl.pem
并使用进行验证
openssl verify -crl_check -CAfile crl_chain.pem crl.pem