Authentication 为什么要使用证书对客户端进行身份验证?

Authentication 为什么要使用证书对客户端进行身份验证?,authentication,ssl,certificate,client-server,Authentication,Ssl,Certificate,Client Server,我正在使用python的twisted实现一个客户端,该客户端在连接时检查服务器ssl证书,基本上遵循这个方法。我在很多howto中看到过,比如这个howto,服务器也通过ssl证书检查客户机的真实性。目前,我使用唯一id和1024个字符字符串对我的客户机进行身份验证(它们是没有人工交互的自动客户机) 我不明白的是,我为什么要使用整个ssl,而不是只向服务器发送“密码”。在所有连接都已ssl加密后,检查服务器证书和所有内容。这是一个类似的问题,但我想知道为什么人们使用ssl客户端证书,而不仅仅是

我正在使用python的twisted实现一个客户端,该客户端在连接时检查服务器ssl证书,基本上遵循这个方法。我在很多howto中看到过,比如这个howto,服务器也通过ssl证书检查客户机的真实性。目前,我使用唯一id和1024个字符字符串对我的客户机进行身份验证(它们是没有人工交互的自动客户机)


我不明白的是,我为什么要使用整个ssl,而不是只向服务器发送“密码”。在所有连接都已ssl加密后,检查服务器证书和所有内容。这是一个类似的问题,但我想知道为什么人们使用ssl客户端证书,而不仅仅是使用ssl客户端证书的最佳方式。

检查证书可以确保您正在连接到您希望连接的用户。它可以防止“中间人”攻击


有关客户端未正确检查证书链的相关情况,请参阅,因此,使用中间人攻击可以非常容易地利用SSL。

拥有由证书颁发机构签名的SSL证书意味着SSL证书所有者已经经历了由CA验证其所有者身份的麻烦。例如,如果您有一个名为widgetsdeluxe.com的电子商务商店,并且您有一个由Verisign等签署的widgetsdeluxe.com域证书,购物者将知道,当他们访问该网站时,证书上的名称与他们访问的实际域名匹配,然后,他们可以相信信息是安全的,并且来自widgetsdeluxe.com域(这是为了防止欺骗和中间人攻击)。

客户端证书限制获得证书授权的人访问。假设您的证书被正确分发和管理,这使得从未经授权的位置(或者说,bot网络)连接变得更加困难,因为您需要的不仅仅是用户名和密码


客户端证书是纵深防御策略的一个潜在部分,如果您处于一个可以管理客户端证书的环境中,。证书很容易撤销。密码可能会被窃取,但窃取客户端证书要困难得多。

使用基于客户端证书的相互身份验证至少可以防止以下攻击/问题:

  • 仿冒密码
  • 密钥记录密码
  • 肩上冲浪的密码
  • 猜密码
  • 多个服务上的密码重用
此外,使用客户端证书,您可以将客户端证书(以及匹配的私钥)存储在智能卡、USB令牌或其他硬件安全模块(HSM)上,从而从“您知道的东西”(密码)变为“您实际拥有的东西”(令牌、卡)加上“您知道的东西”(PIN)。这也叫,

在使用密码作为技术系统到系统通信链路中的共享密钥的特定情况下,使用证书有两个优点:

  • 可扩展性更好:使用共享密钥,每个节点都必须与其他节点共享不同的密钥/密码,从而导致(n-1)!密码,而使用证书时,每个节点只需要一个证书和私钥(n个证书加一个CA)
  • 将钥匙存储在HSM上,从而防止钥匙被数字复制/窃取的可能性

客户端身份验证(即,当服务器检查客户端证书时)的主要优点是,如果服务器被泄露,客户端的秘密(证书的私钥)将不会被泄露。然而,如果客户端使用凭据,它们可能会与服务器一起被破坏。

这个答案只针对服务器证书,OP询问为什么客户端证书会有用。对,在这种情况下,客户端与中间人、中间人与服务器之间的通道仍然是安全的,客户端只是没有验证证书。服务器不关心-如果服务器可以检查客户端证书,例如,在非公共应用程序或证书按预期颁发和签名的某些应用程序中,这将是不可能的。客户端正在检查服务器证书,因此只能与真正的服务器进行连接。如果使用服务器ssl设置对连接进行加密,还会有人进行mitm攻击吗?我想客户端证书可能会使我的服务器更难通过无效的身份验证请求进行ddos攻击,但我不确定。我的意思是,在我看来,客户端证书基本上是一个花哨的密码,我看不出有什么区别。感谢您的回答。SSL不应允许MITM攻击(显然,请检查服务器证书)。但是,用户名/密码很容易泄露。因此,对于另一层,客户端证书不仅仅是一个花哨的用户/密码-它是一个带有分发管理系统和吊销等的签名工件。使用普通用户名/密码,您可以在不需要证书的情况下从多台计算机尝试不同的密码攻击。客户端证书用于另一个安全级别-通常仅在受控环境中才可能。是的,证书的管理和分发是一个棘手的部分。我编写的客户端不需要任何人工输入,因此密码已经存在于客户端读取并发送到服务器的文本文件中。如果有人可以窃取密码文件,他们也可以窃取客户端证书文件。如果我需要“撤销”客户机密码,我可以在数据库/任何地方更改它。那么在这种情况下,在文件上使用cert而不是pwd字符串有什么好处呢?密码是以明文形式通过网络发送的吗?如果是,它可能被偷走。大多数操作系统将客户端证书存储在特定于所用登录名的加密存储中。