客户端(Java、C+;+;等)是否需要有效的数字证书才能成功进行https连接?

客户端(Java、C+;+;等)是否需要有效的数字证书才能成功进行https连接?,https,certificate,Https,Certificate,我计划实现一个小型独立程序,向服务器发出https请求。这是否需要客户端中的有效ssl证书?在这种情况下,SSL握手是如何工作的?没有SSL证书的客户端是否存在任何安全问题?您不需要证书来建立HTTPS连接,但如果您想知道与谁通信,则确实需要证书。只有当服务器需要客户端证书时,才需要客户端证书。客户端证书允许服务器对客户端进行身份验证,但这仅在服务器具有所有授权客户端的列表时才有用。web服务器通常不是这种情况,因此它们很少需要客户端证书 当存在时,客户端证书不会影响安全通道的建立。(这只需要服

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

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

只有当服务器需要客户端证书时,才需要客户端证书。客户端证书允许服务器对客户端进行身份验证,但这仅在服务器具有所有授权客户端的列表时才有用。web服务器通常不是这种情况,因此它们很少需要客户端证书


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

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

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


简言之,您实际上不需要客户端上的任何证书,但您可能需要一个根CA证书来验证服务器的身份。如果您没有该证书,您将不可能信任服务器(除非您有另一个很好的理由这样做),但您可能会选择与它交换数据。

如果您希望了解更多有关HTTPS握手以及协商内容的信息,我完全推荐您阅读moserware上的这篇精彩文章


+1个好问题!我不知道答案,但我很想听听人们怎么说。如果客户端身份验证是可选的,那么服务器如何加密发送回客户端的响应中的内容?服务器使用什么加密算法?服务器使用什么公钥?或者客户端在初始握手期间是否共享密钥/算法?客户端和服务器在初始握手期间就密钥和加密方法达成一致。如果没有客户端身份验证,这是否会成为一个安全问题,因为中间的人可能会冒充服务器欺骗客户端?是的,但是没有人建议您不应该进行客户端身份验证。只是您不需要客户端证书来验证客户端。这只是一个选择。其他的是用户名/密码、kerberos等,但是缺少客户端身份验证不允许有人冒充服务器。它允许他们假装是客户。