代码之家  ›  专栏  ›  技术社区  ›  chris166

通过比较证书指纹进行SSL身份验证?

  •  14
  • chris166  · 技术社区  · 15 年前

    所有SSL专家的问题:

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

    如何在.NET中对设备进行身份验证?够了吗? 比较指纹 证书的 针对已知条目 在数据库中?

    我的理解是指纹是整个证书的散列,包括公钥。冒充我的设备当然可以发送相同的公共证书,但它不知道私钥,对吗?

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

    3 回复  |  直到 7 年前
        1
  •  4
  •   Accipitridae    15 年前

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

    另一个例子是所谓的 self certifying file system .这里再次强调,只有一堆公钥通过安全通道进行交换。(也就是说,这些散列嵌入在URL中。)在这个方案中,不必安全地发送公钥。接收器只需检查公钥的散列是否与URL中嵌入的散列匹配。当然,接收者还必须确保这些URL来自可信的源。

    这个方案和您建议的方案比使用CA要简单,但是有一个缺点。您必须确保使用哈希的数据库是真实的。如果您的数据库很大,那么这将很困难。如果使用cas,那么只需确保根键是可信的。这通常会显著简化密钥管理,当然,这也是基于CA的方案比上述自认证文件系统更受欢迎的原因之一。

        2
  •  3
  •   Chris W. Rea    15 年前

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

    使用散列算法,甚至是好的算法,冲突是一个很重要的事实,您应该防止被激发的攻击者使用匹配的指纹散列来创建一个恶意证书的可能性。防范这种情况的唯一方法是检查证书本身的有效性,即检查上一条语句中所隐含的信任链。

        3
  •  1
  •   Marvin Winkler    7 年前

    Short:

    从理论上讲,你所做的正是证书颁发机构为你所做的。所以应该没问题。

    比较长的:

    当证书颁发机构签署您的公钥/证书/证书请求时,它不会签署整个证书数据。但只是整个证书数据的计算散列值。 这使签名保持较小。

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

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

    有关此主题的详细信息: