0

给定某个 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 的真实性?

或者是唯一的方法来遍历证书存储中的证书,并一个一个地尝试它们直到匹配?

4

1 回答 1

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 不够好 - 有人可能使用该 DN 插入了伪造/自签名)。

我不认为你能做得比这更好,因为包括 Verisign 在内的许多 CA 不会用标识符装饰他们的 CRL(你可以用 确认这一点curl --silent http://crl.verisign.com/pca1.crl |openssl asn1parse -inform DER)。所以你真的很想提取 DN,通过字符串比较找到一个 DN,然后检查签名。理想情况下,与实际由签名签名的 DN 部分进行实际比较;因为从理论上讲,恶意条目可能会使 DN 签名很少(例如,仅国家/地区)(因此允许最后一分钟的更改/匹配)。

于 2012-02-13T09:12:37.290 回答