使 C# 应用程序信任 SSL 证书

Make C# application trust SSL certificate

我正在尝试通过 HttpClient class 执行 HTTPS 获取请求。但是,由于提供的证书不受信任,因此在尝试执行请求时会抛出异常。

我可以访问私有 SSL 密钥,问题是如何将私有密钥安装到应用程序中,以便它可以从网站解密 public 密钥?

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://siteUsingSSL.com/");

var response = await httpClient.GetAsync("swagger/index.html");

Console.WriteLine(response.StatusCode);

要执行自定义 TLS/SSL 证书验证,请使用 ServicePointManager.ServerCertificateValidationCallback 回调。在回调中,您可以根据您喜欢的任何逻辑 return true 或 false。

I have access to the private SSL key and the question is how do I install the private key into the application so it can decrypt the public key from the website?

绝对没有。私钥绝不能离开网站。此外,证书中没有任何可解密的内容。该证书使用私钥 签名 并且签名的验证需要嵌入在证书中的 public 密钥。您收到的证书肯定会 有效 ,否则整个 SSL/TLS 握手将失败。

您需要决定的是您是否信任您收到的证书。

一个简单的解决方案是在您的代码中硬编码证书 属性(比如指纹),然后验证收到的证书的指纹。但是,一旦您需要更改站点证书,这样的验证就会被证明是错误的。

另一个天真的解决方案是验证证书颁发机构,但任何人都可以创建自签名证书并伪造您期望的颁发机构。

到目前为止,最好的解决方案是为您的网站使用受信任的证书。自从 letsencrypt.org 可用后,您的网站上就没有理由不拥有受信任的证书。