找出哪个CA证书验证了CRL文件的真实性

时间:2012-02-05 17:35:54

标签: openssl certificate certificate-revocation

给定某个CRL,例如:

http://crl.verisign.com/pca1.crl

下载它,并要求openssl验证它并显示其内容就像一个魅力:

wget http://crl.verisign.com/pca1.crl
openssl crl -in ./pca1.crl -inform DER -text
verify OK
Certificate Revocation List (CRL):
        Version 1 (0x0)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: /C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority
        Last Update: Nov 22 00:00:00 2011 GMT
        Next Update: Mar 21 23:59:59 2012 GMT
...
[truncated]

有没有办法找出 哪个 CA证书验证了这个CRL的真实性?

或者是循环证书库中证书的唯一方法,并逐个尝试,直到匹配为止?

1 个答案:

答案 0 :(得分:2)

简单的方法是检查输出:

curl --silent http://crl.verisign.com/pca1.crl |openssl crl  -inform DER -noout -issuer

这将是:

issuer=/C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority

因为这将告诉您发行人,即签署 CRL的实体,不一定是颁发撤销证书的实体(尽管通常是这样)。

您可以更进一步,并通过以下方式验证:

 curl  --silent -O ca.pem http://www.verisign.com/repository/roots/root-certificates/PCA-1.pem
 curl --silent http://crl.verisign.com/pca1.crl |\
      openssl crl  -inform DER  -noout -CAfile PCA-1.pem

并检查您是否看到了

 verify OK

或者 - 如果您有证书商店 - 寻找与您在发行人处找到的DN相同的发行人;然后检查签名(比较DN不够好 - 有人可能插入了假冒/自签名的DN)。

我认为你不能做得更好,因为包括Verisign在内的很多CA都没有用标识符来装饰他们的CRL(你可以用curl --silent http://crl.verisign.com/pca1.crl |openssl asn1parse -inform DER确认)。所以你真的要提取DN,在你的藏匿处通过字符串比较找到一个DN,然后检查签名。理想情况下,实际上与签名实际签署的DN部分进行比较;作为一个邪恶的条目,理论上可以使DN很少(例如只是国家)签署(从而允许最后一刻改变/匹配)。