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

时间:2010-01-29 19:00:13

标签: authentication ssl certificate client-server

我正在实现一个python被扭曲的客户端,在连接时检查服务器ssl证书,基本上遵循this配方。我在许多HOWTO中看到过,例如服务器通过ssl证书检查客户端的真实性。目前,我使用唯一的id和1024 char字符串验证我的客户端(它们是没有人工交互的自动客户端)。

我不明白的是,为什么我必须使用整个ssl而不是仅仅将“密码”发送到服务器。在所有连接已经ssl加密后,检查服务器证书和所有内容。 This是一个类似的问题,但我想知道为什么人们使用ssl客户端证书,而不仅仅是最好的方法。

6 个答案:

答案 0 :(得分:4)

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

客户端证书是深度防御策略的潜在部分如果您处于可以管理客户端证书的环境中。

答案 1 :(得分:2)

证书很容易撤销。密码可能被盗,但窃取客户端证书会更加困难。

答案 2 :(得分:2)

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

  • 网络钓鱼密码
  • 密钥记录密码
  • 肩膀冲浪密码
  • 猜密码
  • 多个服务上的密码重用

此外,使用客户端证书使您可以在智能卡,USB令牌或其他硬件安全模块(HSM)上存储客户端证书(以及匹配的私钥),从而从“您知道的东西”(密码)转到“你拥有的物质”(令牌,卡片)加上“你知道的东西”(PIN)。这也称为two-factor authentication

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

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

答案 3 :(得分:0)

客户端身份验证(即服务器检查客户端证书时)的主要优点是,如果服务器受到攻击,客户端的密钥(证书的私钥)将不会受到攻击。如果客户端使用凭据,则可能会与服务器一起泄露。

答案 4 :(得分:-2)

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

有关客户端未正确检查证书链的相关案例,请参阅http://www.thoughtcrime.org/software/sslsniff/,从而可以轻松地使用中间人攻击来利用SSL。

答案 5 :(得分:-2)

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