我对 pyOpenSSL 有点陌生。我想弄清楚如何将生成的套接字关联到 ssl 证书。 verify_cb 被调用,这使我可以访问证书和 conn,但是发生这种情况时我如何关联这些东西:
cli,addr = self.server.accept()
最佳答案
握手完成后,就可以拿到客户端证书了。虽然客户端证书在验证回调 (verify_cb) 中也可用,但除了在该回调中验证证书之外,没有任何理由尝试做任何事情。握手完全成功后,最好设置特定于应用程序的映射。因此,请考虑使用 accept 方法返回的 OpenSSL.SSL.Connection 实例来获取证书(以及从那里获取的 commonName),并在此时将其与连接对象相关联。例如,
client, clientAddress = self.server.accept()
client.do_handshake()
commonNamesToConnections[client.get_peer_certificate().commonName] = client
您可能想要检查映射以确保您没有覆盖任何现有连接(可能使用连接列表而不是将每个通用名称映射到一个)。当然,当连接丢失时,您需要删除条目。
“do_handshake”调用强制握手实际发生。如果没有这个,握手将在应用程序数据首次通过连接传输时发生。这很好,但它会使设置此映射稍微复杂一些。
关于python - 如何将 pyOpenSSL verify_cb 的 ssl 证书中的 cn 关联到生成的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/96508/