openssl CLI-验证整个认证链的CRL

时间:2018-08-22 15:45:48

标签: openssl x509certificate certificate-revocation

我正在使用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,但是它给出了相同的错误。

1 个答案:

答案 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