【发布时间】:2012-08-25 01:47:09
【问题描述】:
客户端是否可以使用已经通过其他方式交换的服务器证书与服务器建立 SSL 连接?
重点是使用已经与客户端的证书加密连接,而不必依赖服务器来提供它。服务器仍然拥有客户端使用的证书的私钥。
这个问题不是特定于语言的,但感谢特定于 python 和 twisted 的答案。
【问题讨论】:
标签: python encryption twisted ssl
客户端是否可以使用已经通过其他方式交换的服务器证书与服务器建立 SSL 连接?
重点是使用已经与客户端的证书加密连接,而不必依赖服务器来提供它。服务器仍然拥有客户端使用的证书的私钥。
这个问题不是特定于语言的,但感谢特定于 python 和 twisted 的答案。
【问题讨论】:
标签: python encryption twisted ssl
SSL/TLS 中的证书仅用于身份验证,加密本身由握手期间协商的共享密钥完成。
如果您想使用证书,则至少需要 SSL/TLS 服务器拥有证书(可能是 TCP 客户端)。您确实可以在建立连接时交换客户端和服务器的角色。也就是说,SSL/TLS 服务器不一定是 TCP 服务器,但可以是 TCP 客户端。见specification glossary中的定义:
client The application entity that initiates a TLS connection to a server. This may or may not imply that the client initiated the underlying transport connection. The primary operational difference between the server and client is that the server is generally authenticated, while the client is only optionally authenticated.
但是,这样做可能会导致困难。就像传统 SSL/TLS 连接中的服务器无法检测请求是否通过 MITM(检查服务器证书完全由客户端负责,无需客户端证书身份验证),使 TCP 客户端成为 SSL/ TLS 服务器使 TCP 客户端很难知道它正在与预期的 TCP 服务器通信:服务器实际上可能是一个 MITM。您需要考虑这是否适合您的需求。
在 Python 中,您应该能够使用 ssl.wrap_socket 的 server_side 参数选择 SSL/TLS 套接字的方向。
服务器仍然拥有证书的私钥 客户使用。
这根本没有意义。私钥应由证书颁发方保密。
也许您正在使用预共享密钥机制。
【讨论】:
ca_certs=。
在 TLS 中,服务器(listen 用于连接的一方)总是需要证书。客户端证书只能用于对等身份验证,不能用于通道加密。
还请记住,如果没有一些基础设施以某种方式验证证书(例如使用证书颁发机构或信任数据库),您不能简单地“加密”连接。没有证书有效性验证的加密不适用于主动攻击者(谷歌搜索“中间人攻击”以获得更多详细信息)。
【讨论】: