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

时间:2018-11-15 15:43:07

标签: c# .net ssl openssl-net

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

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

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

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

Console.WriteLine(response.StatusCode);

1 个答案:

答案 0 :(得分:3)

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

  

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

完全。私钥绝不能离开站点。此外,证书中没有要解密的内容。使用私钥对证书进行签名,并且签名的验证需要公共密钥,该密钥嵌入证书中。您肯定会收到的证书将是 valid ,因为否则,整个SSL / TLS握手将失败。

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

一个幼稚的解决方案是在代码中对证书属性进行硬编码(例如,指纹),然后验证接收到的证书的指纹。但是,一旦需要更改站点证书,这种验证将被证明是不好的。

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

到目前为止,最好的解决方案是为您的站点使用受信任的证书。自letsencrypt.org推出以来,确实没有任何借口在您的网站上没有受信任的证书。