.net - 如何验证此 Windows 系统是否信任给定的 SSL 服务器证书?

标签 .net windows ssl https ssl-certificate

我在 Windows 系统上使用 .NET(实际上是 C#)代码,并且获得了 SSL 服务器证书(指纹或整个公共(public)部分)S。现在我想知道(在 .NET 中)。 NET 代码):

Would .NET code running on this system trust this server certificate X?

例如,如果在这个系统上我会创建一个 System.Net.WebClient并将其指向使用该服务器证书的 HTTPS URL,它会被信任吗?

我知道我可以查看 Windows 信任存储(本地计算机 -> 受信任的根证书颁发机构等)并尝试计算 X 是否受信任,同时查看中间机构、证书链等。但我不知道到底要实现什么算法,所以我非常愿意重用 .NET 已经使用的算法。

(澄清一下,这是一个安装程序类型的程序,其中使用证书 X 的服务器实际上尚不可用 - 否则我可以对这样的服务器进行测试调用,看看是否存在信任错误结果。)

最佳答案

您有完整的 SSL 证书还是只有其指纹/公钥?

要检查一个证书的信任度,您需要构建到根 CA 的整个链,并且该根 CA 需要位于受信任的根存储中(LocalMachine 或 CurrentUser)。但如果没有 x509 的 SSL 证书或不了解其颁发者,这是不可能的。

如果您有 SSL 证书,您可以使用 X509Chain class 构建链及其 Build method 。然后检查ChainStatus以获取链状态的详细错误信息。

关于.net - 如何验证此 Windows 系统是否信任给定的 SSL 服务器证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318941/

相关文章:

.net - Visual Studio 生成后事件 : for %f in (set) command

.net - 为什么 HttpWebRequest 和 WebBrowser 获得不同的 HTML 源代码?

Java 服务器应用程序闲置一段时间后速度变慢 (Windows)

windows - Docker在Linux环境而不是Windows环境下撰写工作

ios - 签署 apple-app-site-association

php - 在 PHP Mailer 中允许不安全的连接

c# - 在 Visual Studio Code 中使用命令行提示运行 C# 程序

c# - Asp.net、C# 从面板中选择单选按钮和标签

windows - 为什么 FileStream 和 CopyFile 比 Windows Explorer 慢这么多?

ruby-on-rails - Heroku + Rails + PG: ActiveRecord::StatementInvalid (PG::ConnectionBad: PQconsumeInput() SSL 连接意外关闭