2012-02-05 41 views
0

给定某个CRL,例如:找出哪些CA证书验证一个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证书验证了此证书的真伪?

或者是循环遍布证书存储区中的证书的唯一方法,并逐一尝试它们,直到匹配命中为止?

+0

这个问题似乎是题外话,因为它不是关于编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[信息安全堆栈交换](http://security.stackexchange.com/)会是一个更好的问题。 – jww 2015-04-19 22:49:23

回答

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(并因此允许最后一分钟的改变/匹配)。