代码之家  ›  专栏  ›  技术社区  ›  Prabhu R

在客户端(Java、C++等)上需要有效的数字证书才能成功的HTTPS连接吗?

  •  3
  • Prabhu R  · 技术社区  · 15 年前

    我计划实现一个小型的独立程序,该程序将向服务器发出HTTPS请求。这是否需要客户端中的有效SSL证书?在这种情况下,SSL握手是如何工作的?客户端中是否存在没有SSL证书的安全问题?

    4 回复  |  直到 15 年前
        1
  •  6
  •   Martin    15 年前

    除了加密网络流量外,HTTPS通常用于对服务器进行身份验证。也就是说,为了向客户提供关于谁拥有服务器的可靠信息,等等。为了使服务器工作,客户需要检查服务器发布的证书中的信任链。为了使这种情况自动发生,客户机应该安装一个描述颁发服务器证书的证书颁发机构的证书。通常,此类证书在您的计算机上的一个名为“受信任根证书颁发机构”的存储中找到,大多数操作系统都附带一组已安装的通用CA。

    此外,许多Web服务器提供了一个特性,客户机可以通过提供客户机证书向服务器进行身份验证。Web服务器能够检查来自客户端的证书,并将其映射到服务器上的一组权限上。这种“客户机身份验证”对于工作的HTTPS会话是不必要的,但是它只是一个选项。

    简而言之,你实际上 需要 客户机上的任何证书,但您可能 希望 拥有根CA证书以验证服务器的身份。如果您没有该证书,您将无法信任服务器(除非您有其他充分的理由这样做),但您可以选择与它交换数据。

        2
  •  2
  •   Cheekysoft Moz Morris    15 年前

    如果您希望了解更多关于HTTPS握手和协商内容的信息,我完全建议您查看Moserware上的这篇优秀文章。

    http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html

        3
  •  1
  •   Peter Ruderman    15 年前

    只有当服务器需要客户端证书时,才需要客户端证书。客户机证书允许服务器对客户机进行身份验证,但只有当服务器具有所有授权客户机的列表时,这才有用。Web服务器通常不是这样,因此很少需要客户机证书。

    当存在时,客户端证书不影响安全通道的建立。(只有服务器的证书是必需的,并且在混合中添加客户端证书不会改变过程。)一旦建立了安全通道,服务器将使用客户端证书对客户端进行身份验证(通常通过将客户端的公钥或名称与授权客户端列表进行比较)。

        4
  •  0
  •   pauljwilliams    15 年前

    您不需要证书来建立HTTPS连接,但是如果您想知道与谁通信,则需要证书。