[英]How to validate the SSL server certificate in twisted SSL client
如何在我的双绞线SSL客户端中验证SSL服务器证书?
我非常熟悉SSL,我已经完成了扭曲的SSL教程,但我仍然不清楚某些事情。
我的疑问是:
我应该如何使用twisted.internet.ssl
模块验证SSL服务器证书,
在处理SSL时, ssl.ClientContextFactory.getContext
方法如何有用,
如何告知扭曲的SSL客户端公钥文件的位置?
从Twisted 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
采用其他(可选)参数,这也可能有用。
在Twisted 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
及其值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.