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

标签 c# .net ssl x509certificate

我正在尝试使用 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 的可行的第二原像攻击。

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

关于c# - 当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34642606/

相关文章:

c# - 如何重用连接/请求以避免握手

c# - 无论鼠标在哪里,如何访问 WPF 中的鼠标移动事件?

.net - 在 Windows Server 启动时自动运行程序

python - 与 RabbitMQ 建立 TLS 连接时如何调试 "pika.exceptions.AuthenticationError: EXTERNAL"错误?

xcode - 在 MacOS Sierra 上找不到“openssl/conf.h”文件错误

c# - 如何在 Lucene.NET 中搜索 Field.Index.NOT_ANALYZED 字段?

c# - ASP.NET C# 将方法移动到类文件并从代码隐藏调用它

c# - 如何在不进行广泛搜索的情况下根据 2 个条件获取对象?

c# - 如何将工具提示数据绑定(bind)到用户控件的一部分?

c# - 确定一个方法是否调用另一个包含新语句的程序集中的方法,反之亦然