与客户端证书的SSL连接

2024-06-10 06:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

客户机是否可以使用已经通过其他方式交换的服务器证书建立到服务器的SSL连接?在

关键是使用客户机已有的证书对连接进行加密,而不必依赖服务器来提供它。服务器仍然拥有客户端使用的证书的私钥。在

这个问题不是特定于语言的,但是对于python和twisted特有的答案,我们还是很感激的。在


Tags: 答案服务器语言客户端ssl客户机方式twisted
2条回答

在TLS中,服务器(连接listen的那一方)总是需要证书。客户端证书只能用于对等身份验证,但不能用于通道加密。

还要记住,如果没有某种基础设施(例如使用证书颁发机构或信任数据库)来验证证书,就不能简单地“加密”连接。没有证书有效性验证的加密不适用于主动对手(google将其称为“中间人攻击”(man-in-the-middle attack),了解更多细节)。

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/TLS套接字的方向。

The server would still have the private key for the certificate the client uses.

这完全没有道理。私钥应由颁发证书的一方保密。

也许你想要的是预共享密钥机制。

相关问题 更多 >