当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是不是安全?

Posted

技术标签:

【中文标题】当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是不是安全?【英文标题】:Is it safe to test the X509Certificate.Thumbprint property when you know an invalid certificate is safe?当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是否安全? 【发布时间】:2016-04-11 02:28:18 【问题描述】:

我正在尝试使用 SmtpClient.Send 以编程方式发送电子邮件。我目前在尝试发送电子邮件时收到AuthenticationException。这是因为证书验证过程失败。

我知道证书是正确的,但我也明白信任所有证书并不安全,就像这样做的建议一样:

ServicePointManager.ServerCertificateValidationCallback += 
     (sender, certificate, chain, sslPolicyErrors) =>  return true; ;

所以我想知道测试Thumbprint 的已知有效证书指纹是否足够安全,如下所示:

ServicePointManager.ServerCertificateValidationCallback +=
     (sender, certificate, chain, sslPolicyErrors) =>
     
         if (sslPolicyErrors == SslPolicyErrors.None)
             return true;
         else if (certificate.GetCertHashString().Equals("B1248012B10248012B"))
             return true;

         return false;
     ;

【问题讨论】:

【参考方案1】:

是的。

指纹是证书的 SHA1 哈希,虽然并非绝对不可能,但极难伪造。

在技术方面,目前尚无已知可行的对 SHA1 的第二原像攻击。

但是,如果有任何疑问,您可以存储整个证书,也许使用指纹作为密钥。然后,您可以将整个证书与您存储的可信证书进行比较。

【讨论】:

从.NET 4.8开始,可以验证SHA-256指纹:***.com/q/11586206/850848#66776112【参考方案2】:

指纹不是证书的一部分。 在每个证书工具中,您都可以看到这个值,但它是整个证书的计算散列值。通常以 SHA1 表示,但计算为 SHA256 没有障碍。

Morgan Simonsen 写道: https://morgansimonsen.com/2013/04/16/understanding-x-509-digital-certificate-thumbprints/

【讨论】:

以上是关于当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何验证Root-CA-Cert证书(x509)链?

使用X509Certificate2类操作证书文件

使用windows crypt API解析X509证书

哪位大神知道SSL Cert是啥?

将X509证书转换为base64

使用 node.js 验证带有 CA 证书的 X509 证书