如何验证扭曲SSL客户端中的SSL服务器证书
如何验证我的扭曲SSL客户端中的SSL服务器证书?如何验证扭曲SSL客户端中的SSL服务器证书
我非常初学SSL,我已经通过了twisted SSL tutorials但我仍然对某些事情不清楚。
我的查询是:
我应该如何验证使用
twisted.internet.ssl
模块的SSL服务器证书,如何
ssl.ClientContextFactory.getContext
方法是在处理SSL有用,我怎么能告诉扭曲的SSL客户端有关公钥文件的位置?
由于扭曲14.0,optionsForClientTLS
是做到这一点的最佳方式:
from twisted.internet.ssl import optionsForClientTLS
from twisted.internet.endpoints import SSL4ClientEndpoint
ctx = optionsForClientTLS(hostname=u"example.com")
endpoint = SSL4ClientEndpoint(reactor, host, port, ctx)
factory = ...
d = endpoint.connect(factory)
...
optionsForClientTLS
采取其它(任选的)参数,以及它也可以是有用的。
此前扭曲的14.0,这个过程有点更多地参与:建立连接
后和SSL握手已经成功完成(这意味着该证书目前是否有效基于其notBefore
和notAfter
价值观和它是由您已表明是可信的),你可以从传输拿到证书认证机构的证书签名:
certificate = self.transport.getPeerCertificate()
证书被表示为pyOpenSSL X509实例。它可以用来检索证书的主题名称的方法:
subject_name = certificate.get_subject()
的主题名称是一个专有名称,表示为pyOpenSSL X509Name实例。您可以检查它的领域:
common_name = subject_name.commonName
这是一个字符串,例如"example.com"
。
如果需要检查subjectAltName
,而不是(这很可能你做的),那么你就可以在证书的扩展信息:
extensions = certificate.get_extensions()
这是pyOpenSSL X509Extension实例的列表。你必须解析每一个找到subjectAltName
及其值。
如何指定“.pem”文件,即如何告诉将ssl客户端关于我的“.pem”文件位置。 – 2013-02-27 04:31:35
“.pem”文件可以包含任何数量的内容。我不确定你在问什么。它是否包含服务器需要提供的确切证书?它是否包含必须签署服务器证书的证书颁发机构证书?它是否包含证书链?查看pyOpenSSL Context文档以查看处理这些需求的API。 – 2013-02-27 16:15:21
它包含证书链。 – 2013-02-27 16:33:19
请解释您的意思是“验证”。通常,执行“验证”是底层SSL实施的工作。根据你的意思,这可能已经完成,或者你可能需要编写额外的代码来做到这一点。 – 2013-02-26 00:26:43
验证检查有效时间,主机名和验证证书的意义。 – 2013-02-26 06:16:37
只有主机名检查尚未完成。 – 2013-02-27 02:37:10