2010-01-29 90 views
13

我正在实现一个客户端与python的扭曲,连接时检查服务器SSL证书,基本上this配方。我在很多HOWTO中看到过,比如这个服务器通过SSL证书检查客户端的真实性。目前,我使用唯一的ID和1024个字符串(他们是自动化客户端,无需人工交互)对我的客户端进行身份验证。为什么我应该使用证书来验证客户端?

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

回答

-1

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

请参阅http://www.thoughtcrime.org/software/sslsniff/以了解客户端未正确检查证书链的相关情况,从而导致通过中间人攻击利用SSL的非常简单的方法。

+0

对,在这种情况下,客户端和中间人,中间人和服务器之间的通道仍然安全,客户端只是没有验证证书。服务器不关心 - 如果服务器可以检查客户证书,例如,一个非公开的申请或一些申请证书发行和签署的预期,这是不可能的。 – 2010-01-29 19:15:55

-2

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

+0

此答案仅解决服务器证书问题,OP询问为什么客户端证书会有用。 – 2010-01-29 19:08:20

4

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

客户端证书是一个潜在的部分防御纵深战略,如果你是在一个环境中,你可以管理客户端证书

+0

客户端正在检查服务器证书,因此只能使用真实服务器进行连接。如果使用服务器SSL连接加密连接,有人仍然可以进行mitm攻击?我想客户端证书可能会让我的服务器无法使用无效的身份验证请求更难,但我不确定。我的意思是在我看来,客户端证书基本上是一个奇特的密码,我没有看到有什么不同。感谢您的回答。 – 2010-01-29 19:27:32

+1

对于SSL来说,MITM攻击不应该是可能的(显然,请检查服务器证书)。但是,用户名/密码很容易泄露。因此,对于另一层,客户端证书不仅仅是一个奇特的用户/密码 - 它是一个带有分发管理系统和撤销等签名工件。使用普通的用户名/密码,您可以尝试从多台机器进行不同的密码攻击,而无需证书。客户端证书用于另一个安全级别 - 通常只能在受控环境中进行。 – 2010-01-29 19:34:11

+0

是的,证书的管理和分配是棘手的部分。 – 2010-01-29 19:36:55

2

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

+2

我写的客户端不需要任何人工输入,所以密码已经存在于客户端读取并发送到服务器的文本文件中。如果有人可以窃取密码文件,他们也可以窃取客户端证书文件。如果我需要“撤销”客户端密码,我可以将其更改为数据库/无论如何。因此,在这种情况下,在文件上使用pwd字符串的证书的优点是什么? – 2010-01-29 19:50:21

+1

以明文形式通过电线发送密码?如果是,它可以被盗。大多数操作系统将客户端证书存储在特定于所用登录名的加密存储中 – Greg 2010-01-29 19:53:58

2

使用客户端基于证书的相互认证防止至少下列攻击/问题:

  • 钓鱼密码
  • 键登录密码
  • 肩窥密码
  • 猜测密码
  • 多个服务上的密码重用

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

在你使用密码作为一个技术,系统与系统之间的通信链路共享密钥的特定情况下,使用证书有两个好处:

  • 秤更好:与共享密钥,每个节点都有分享不同密钥/密码与其他节点相连,导致(n-1)!密码,而对于证书,每个节点只需要一个证书和私钥(n个证书加一个CA)在HSM上存储密钥的可能性,从而防止其被数字复制/窃取。
0

客户端身份验证(即服务器检查客户端证书时)的主要优点是,如果服务器遭到入侵,客户端的秘密(证书的私钥)不会受到威胁。而如果客户端使用凭据,他们可能会与服务器一起受到攻击。