从评论到我的第一个答复,我发现“验证证书的含义”是一个普遍的误解。我将尝试在此处写一个简短的说明,以消除某些错觉。
证书验证是关于证书密码元数据上的签名(即主题,有效期,扩展名等)的签名。
如果验证所需的只是一个自签名证书,则无法将其与元数据完全相同但密钥不同的另一个自签名证书区分开,除非您事先知道密钥证书的密钥。并且不要忘了您建立了所有此验证程序,以消除拥有此预共享知识的要求。使用常规证书验证,您无法完全消除拥有一些预共享知识的要求,该知识是一组第三方证书,也称为“
CA证书”。由于这些知识是预先共享的,因此这些证书可能是自签名的,但是请记住,您不是从验证过程中而是从一些外部知识中收到有关这些证书有效性的信息。
当在对等方之间分配了一组受信任的“ CA证书”时,可以使用这些证书来签署其他证书,并根据对受信任CA的预共享知识来检查签名。
但是,如果除了证书本身之外,您对自签名证书没有任何其他了解,就无法对对此特定证书的信任做任何假设,因为它可以由某些邪恶的黑客以及您可信赖的服务器发布。
在实施任何类型的证书验证过程之前,请先获得有关中间攻击中的人,公共密钥基础结构和公共密钥密码学的一些知识。
请理解,对自签名证书的盲目验证即使在您自己的网络中也不会受到聪明的黑客的攻击,也不会保护您,甚至不考虑一般的Internet安全性。
编辑 :问题作者澄清说,他实际上是在寻找如何使用M2Crypto绑定验证证书上的Verisign(或其他CA)签名的方法。这是两个示例:
from M2Crypto import X509, SSL# manual validation of a signature on a certificate using a given CA cert:ca = X509.load_cert('/path/to/ca_cert.pem')cert = X509.load_cert('certificate_to_validate.pem')print "Verification results:", cert.verify(ca.get_pubkey())# adding a given CA cert to the SSL Context for verificationctx = SSL.Context()# load a certificate from filectx.load_verify_locations(cafile='/path/to/ca_cert.pem') # or use all certificate in a CA directoryctx.load_verify_locations(capath='/path/to/ca/dir') # or you can specify both options at the same time.
如果你要使用许多CA证书的目录(通常是更方便),你必须重新命名每个证书来
<hash>.0这里
<hash>是证书主题(与获得的哈希
opensslx509 -noout -hash -in cert.pem)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)