【问题标题】:SSL Certificate and identity verificationSSL 证书和身份验证
【发布时间】:2013-08-04 00:40:48
【问题描述】:

我一直在寻找有关 SSL 证书和加密协议的信息。我得到了很好的答案,尤其是在这个网站上。

只有一件事我不明白。如果我做对了,那么身份验证(我的意思是服务器身份的验证,而不是证书身份的验证)是使用非对称加密进行的。

这意味着步骤将是(如果我错了,请阻止我):

  • 客户端使用经过验证的公钥加密随机挑战字符串并将其发送到服务器。
  • 服务器使用其私钥对其进行解密并将其发送回客户端。
  • 客户端检查来自服务器的响应是否与它刚刚发送的随机挑战字符串匹配。

是什么阻止了假服务器这样做,例如 www.example.com 的真实证书但没有私钥?

  • 客户端使用经过验证的公钥加密随机挑战字符串并将其发送到服务器。
  • 假服务器将加密的随机挑战字符串发送到 www.example.com,作为要检查其身份的客户端。
  • www.example.com 将解密后的随机挑战字符串发送回假服务器。
  • 假服务器将其发送回客户端。
  • 身份确认了吗?

【问题讨论】:

    标签: authentication ssl https certificate


    【解决方案1】:

    客户端使用经过验证的公钥加密随机挑战字符串 并将其发送到服务器。

    客户端使用服务器的公钥加密某些东西的密钥交换模式是 RSA 密钥交换模式。在section F.1.1.2 of the TLS specification中有完整的描述。

    本质上,客户端生成预主密钥,使用服务器的公钥(在服务器发送的服务器证书中找到)对其进行加密,并将其发送到服务器(在客户端密钥交换消息中)。而已。只有具有匹配私钥的服务器才能解密它。服务器不会将任何解密版本发送回客户端,因此无法要求第 3 方执行您似乎想到的任何操作。

    【讨论】:

      【解决方案2】:

      这只是一个稻草人的论点。您列出的步骤完全是虚构的。 实际步骤是:

      1. 服务器将其证书作为 TLS 握手的一部分发送。
      2. 服务器通过其证书和其他握手消息发送由其私钥签名的数字签名。
      3. 客户端使用证书中的公钥来验证数字签名。

      只有拥有证书中公钥对应的私钥的服务器才能成功。

      我建议你阅读一下,而不是在互联网上随意发帖:试试规范参考:RFC 2246

      【讨论】:

      • @BabuSrinivasan 你错了。 #2 没有错。您将证书中包含的签名(由颁发者签名)与 TLS 握手协议期间交换的签名混淆了,该协议是在迄今为止的整个握手过程中计算的,包括证书。没有它,客户端不可能验证服务器实际拥有该证书。坦率地说,你似乎对此一无所知。我也建议您阅读 RFC 2246。您显然也没有听说过自签名证书。
      • @downvoter 我的奖杯柜的另一个被否决的正确答案。这种对投票系统的滥用只会降低本网站的实用性。
      • 您的“规范性参考”链接以及您的帖子已关闭
      • @user1855153 已修复,但 RFC 并不难找到。我真的希望任何计算机程序员都能找到它们。
      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2011-11-09
      • 1970-01-01
      • 2015-04-01
      相关资源
      最近更新 更多