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

Is it safe to test the X509Certificate.Thumbprint property when you know an invalid certificate is safe?

我正在尝试使用 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;
     };

是的。

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

从技术角度来说,目前还没有针对 SHA1 的已知可行 second-preimage 攻击。

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

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

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