3

如何在我的扭曲 SSL 客户端中验证 SSL 服务器证书?

我是 SSL 的初学者,我已经阅读了扭曲的 SSL 教程,但我仍然不清楚一些事情。

我的查询是:

  • twisted.internet.ssl我应该如何使用模块验证 SSL 服务器证书,

  • ssl.ClientContextFactory.getContext方法在处理 SSL 时如何有用,

  • 如何告诉twisted SSL 客户端公钥文件的位置?

4

1 回答 1

4

自 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 握手成功完成后(这意味着证书当前基于其notBeforenotAfter值有效,并且它由您指示受信任的证书颁发机构证书签名),您可以从传输中获取证书:

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和它的值。

于 2013-02-27T02:42:03.690 回答