【问题标题】:SSL authentication by comparing certificate fingerprint?通过比较证书指纹进行 SSL 身份验证?
【发布时间】:2010-11-08 08:03:56
【问题描述】:

所有 SSL 专家的问题:

我们有一个带有小型网络服务器的嵌入式设备,我们可以在上面安装我们自己的 SSL 自签名证书。客户端是用 .NET 编写的(但这并不重要)。

如何在 .NET 中对设备进行身份验证? 将证书的指纹与数据库中的已知条目进行比较是否足够?

我的理解是指纹是整个证书的哈希,包括公钥。伪装成我的设备的设备当然可以发送相同的公共证书,但它不知道私钥,对吧?

还是我必须建立自己的信任链,创建自己的 CA 根证书,签署 Web 服务器证书并将其安装在客户端上?

【问题讨论】:

    标签: security authentication ssl hash


    【解决方案1】:

    您的建议原则上是可以的。例如在key signing parties 期间使用。在这里,参与者通常只是交换他们的姓名和公钥的指纹,并确保聚会上的人确实是他/她声称的人。仅验证指纹比验证长公钥要容易得多。

    另一个例子是所谓的self certifying file system。在这里,只有公钥的哈希值通过安全通道进行交换。 (即这些哈希值嵌入在 URL 中。)在这个方案中,公钥不必安全发送。接收者只需检查公钥的哈希值是否与嵌入在 URL 中的哈希值匹配。当然,接收者还必须确保这些 URL 来自受信任的来源。

    此方案和您提出的方案比使用 CA 更简单。但是有一个缺点。您必须确保带有哈希的数据库是真实的。如果您的数据库很大,那么这可能会很困难。如果您使用 CA,那么您只需确保根密钥是真实的。这通常会显着简化密钥管理,当然这也是为什么基于 CA 的方案比例如基于 CA 的方案更受欢迎的原因之一。上面提到的自认证文件系统。

    【讨论】:

    • 在指纹验证和密钥签名方之间进行类比的好方法。 SHA-1 哈希对冲突的抵抗力在这两个事件中都起着重要作用。
    【解决方案2】:

    同样,您不会也不应该仅仅因为两个对象的哈希码匹配就认为它们是相等的,您也不应该仅仅因为证书的指纹出现在“已知证书”列表中就认为它是真实的指纹”。

    冲突是哈希算法的生活事实,即使是好的算法也是如此,您应该防止有动机的攻击者可以制作具有匹配指纹哈希的流氓证书的可能性。防止这种情况的唯一方法是检查证书本身的有效性,即检查您在上一条语句中暗示的信任链。

    【讨论】:

    • 嗯?诸如 SHA1 之类的加密散列函数已被设计成不可能找到两个散列到相同输出的输入。因此,如果它们的哈希匹配,则可以安全地假设输入相等。因此,可以安全地假设一个有动机的攻击者不能制作两个具有匹配哈希的证书(至少只要哈希没有被破坏)。此外,仅检查自签名证书的签名是不够的。您需要能够信任签名密钥。
    • 碰撞哈希算法的生活事实。尽管其中一些算法的设计初衷是好的,但 MD5 已经被废黜,SHA-1 也被证明有弱点。请参阅 crn.com/security/212700354rsa.com/rsalabs/node.asp?id=2834。我认为最好彻底检查证书,而不是仅仅依靠指纹。
    • ... 为了检查签名的有效性,您首先对数据进行哈希处理,然后检查它是否与已签名的哈希值相同。因此,如果您验证数字签名,那么您实际上确实依赖于哈希算法的抗冲突性。
    • @Accipitridae:我也是这么想的。
    • @Accipitridae:好点。 +1。如果我们这样做该死,如果我们不这样做该死,我想解决这些弱点并不容易。但是,替换旧算法的工作正在进行中。见csrc.nist.gov/groups/ST/hash/index.html
    【解决方案3】:

    短:

    理论上,您可以完全按照证书颁发机构为您所做的工作。所以应该没问题。

    更长:

    当证书颁发机构签署您的公钥/证书/证书请求时,它不会签署整个证书数据。但只是整个证书数据的计算哈希值。 这样可以保持签名很小。

    当您不想建立自己的 CA 或使用商业/免费 CA 时 - 通过将指纹与您信任的指纹进行比较,您将获得第二个最值得信赖的配置。最值得信赖的解决方案是比较整个证书,因为它还可以保护您免受哈希冲突攻击。

    正如这里的其他人所说,您应该确保使用安全/安全的散列算法。 SHA-1 不再安全。

    此主题的更多详细信息:

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2018-07-28
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 2012-02-10
      • 2019-01-03
      相关资源
      最近更新 更多