使用python验证同行在SSL(Verifying peer in SSL using pytho

2019-07-20 21:22发布

我试图找出我怎么能去的python由服务器验证自签名证书。 在谷歌我找不到多少数据。 我也想确保服务器URL

感谢您事先的任何见解。

Answer 1:

从评论到我的第一次答复我看到有一个普遍的误解是什么“验证证书的意思。” 我会尽量在这里写一个简要的解释,以消除一些幻想。

证书验证是关于认证检查元数据的签名(即主题,有效期,扩展和等)对某些加密签名。

如果你有验证是一种自签名证书不能从具有完全相同的元数据的另一个自签名的证书,但不同的键区分开来,除非你知道密钥证书的提前关键。 而且不要忘了,你建立这一切的验证程序删除要求有这样的预共享知识。 通过定期证书验证你不能完全清除的要求有一定的预共享knowlege,这是一组第三方证书,也被称为“CA证书”的。 由于这方面的知识预共享,这些证书可能是自签名的,但要记住,你已经收到关于未验证过程中的这些证书的有效性的信息,但记者从一些外部知识。

当你有一组可信“CA证书”同龄人之间进行分配的,你可以使用这些签署其它证书和检查数字签名对信任的CA是预共享知识。

但是,如果您对自签名证书不需要额外的知识证书本身除了你就不会去信任假设这个特定的证书,因为它可以通过一些邪恶的黑客,以及由您值得信赖的服务器发出。

请获得一定的了解的中间人攻击人 , 公钥基础设施和公共密钥加密法实施任何形式的证书验证过程之前一般。

请理解一个自签名证书的盲目核查不会保护你甚至一个聪明的黑客在自己的网络,即使不考虑一般的互联网安全。

编辑 :问题撰文澄清说,他实际上是在寻找如何验证使用M2Crypto绑定的证书威瑞信(或其他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 verification
ctx = SSL.Context()
# load a certificate from file
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem') 
# or use all certificate in a CA directory
ctx.load_verify_locations(capath='/path/to/ca/dir') 
# or you can specify both options at the same time.

如果要使用许多CA证书的目录(这常常是更方便的),则必须每个证书重命名为<hash>.0其中<hash>是证书主体的散列(用获得openssl x509 -noout -hash -in cert.pem )。



Answer 2:

我假设你使用一些OpenSSL的结合。 我看到2种方式来解决你的问题。

  1. 您可以添加您的证书OpenSSL的目录(运行openssl version -d看到它为您的系统)。 这将影响计算机上使用OpenSSL的所有程序。
  2. 加载证书,并添加它运行时(代码草图下面是PyOpenSSL,但它应该是其他绑定类似):

x509 = OpenSSL.crypto.load_certificate(...)
ctx = OpenSSL.SSL.Context(...)
store = ctx.get_cert_store()
store.add_cert(x509)
ctx.set_verify(VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT, ...)


Answer 3:

这是不可能的,因为验证其本质的自签名证书:这是自签名。

你必须签署其他一些受信任的第三方证书的证书,以便能够验证什么,并在此之后,你可以是第三方的证书添加到您的受信任的CA列表,然后你就可以核实该证书签名的证书/ CA。

如果您想了解如何做到这一点在Python的建议,你应该提供您使用的是SSL库的名字,因为是为Python SSL库的选择。



文章来源: Verifying peer in SSL using python
标签: python ssl