【问题标题】:SSL connection with client-side certificate与客户端证书的 SSL 连接
【发布时间】:2012-08-25 01:47:09
【问题描述】:

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

重点是使用已经与客户端的证书加密连接,而不必依赖服务器来提供它。服务器仍然拥有客户端使用的证书的私钥。

这个问题不是特定于语言的,但感谢特定于 python 和 twisted 的答案。

【问题讨论】:

    标签: python encryption twisted ssl


    【解决方案1】:

    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_socketserver_side 参数选择 SSL/TLS 套接字的方向。

    服务器仍然拥有证书的私钥 客户使用。

    这根本没有意义。私钥应由证书颁发方保密。

    也许您正在使用预共享密钥机制。

    【讨论】:

    • “密钥”是指 CSR,其中包括公钥。例如,我希望客户端通过应用程序获取该公钥,然后使用它从服务器获取对称密钥,然后将其用于加密进一步的通信。不考虑该公钥的安全交换,如果为了论证而做出该假设,则不需要来自服务器的进一步证书。
    • 啊...好吧,您确实说过“私钥”(如果您指的是公钥,请随时编辑您的问题)。如果您希望客户端使用服务器的公钥对服务器进行身份验证,请按照正常方式进行:设置 cert+priv。服务器上的密钥并将其证书作为受信任的证书导入客户端(如果它是自签名证书或您自己的 CA 证书,您可以将其与您的应用程序捆绑在一起)。
    • 我猜你是对的,它是一种 Pre-Sahred Key 机制,我只是希望密钥是不对称的。
    • 不,这与 PSK 无关。您似乎想要将自己的服务器证书分发到客户端应用程序,以便客户端应用程序在连接到服务器时可以识别服务器,而不依赖于已建立的 CA。
    • 编辑后,这比您最初的想法要简单得多:您应该能够将该证书显式传递给客户端上的ca_certs=
    【解决方案2】:

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

    还请记住,如果没有一些基础设施以某种方式验证证书(例如使用证书颁发机构或信任数据库),您不能简单地“加密”连接。没有证书有效性验证的加密不适用于主动攻击者(谷歌搜索“中间人攻击”以获得更多详细信息)。

    【讨论】:

    • 我不打算开始讨论 CA 的有效性,但我打算绕过它们,即使只是为了测试它。
    猜你喜欢
    • 2017-06-18
    • 2017-04-28
    • 2013-08-04
    • 2013-04-15
    • 2010-10-16
    • 2012-02-15
    • 1970-01-01
    • 2018-07-30
    • 2016-08-19
    相关资源
    最近更新 更多