如何将pyOpenSSL verify_cb的ssl证书中的cn与生成的套接字相关联

时间:2008-09-18 20:24:44

标签: python pyopenssl

我对pyOpenSSL有点新鲜。我试图弄清楚如何将生成的套接字关联到ssl证书。 verify_cb被调用,这使我可以访问证书和conn但是如何在发生这种情况时将这些事情联系起来:

cli,addr = self.server.accept()

1 个答案:

答案 0 :(得分:5)

握手完成后,您可以获得客户端证书。虽然验证回调(verify_cb)中也提供了客户端证书,但除了验证该回调中的证书之外,没有任何理由尝试做任何事情。在握手完全成功后,最好设置特定于应用程序的映射。因此,请考虑使用accept方法返回的OpenSSL.SSL.Connection实例来获取证书(并从那里获取commonName)并将其与此时的连接对象相关联。例如,

client, clientAddress = self.server.accept()
client.do_handshake()
commonNamesToConnections[client.get_peer_certificate().commonName] = client

您可能需要检查映射以确保不覆盖任何现有连接(可能使用连接列表而不是仅将每个公用名称映射到一个)。当然,您需要在连接丢失时删除条目。

`do_handshake'调用强制实际发生握手。如果没有这个,当首次通过连接传输应用程序数据时,将发生握手。这很好,但这会使这个映射设置稍微复杂一些。