我正在尝试通过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);
答案 0 :(得分:3)
要执行自定义TLS / SSL证书验证,请使用ServicePointManager.ServerCertificateValidationCallback
回调。在回调中,您可以根据自己喜欢的逻辑返回true或false。
我可以访问SSL私钥,问题是如何将私钥安装到应用程序中,以便它可以从网站解密公钥?
完全否。私钥绝不能离开站点。此外,证书中没有要解密的内容。使用私钥对证书进行签名,并且签名的验证需要公共密钥,该密钥嵌入证书中。您肯定会收到的证书将是 valid ,因为否则,整个SSL / TLS握手将失败。
您需要确定是否信任所收到的证书。
一个幼稚的解决方案是在代码中对证书属性进行硬编码(例如,指纹),然后验证接收到的证书的指纹。但是,一旦需要更改站点证书,这种验证将被证明是不好的。
另一种幼稚的解决方案是验证证书颁发机构,但是任何人都可以创建自签名证书并伪造您期望的证书颁发机构。
到目前为止,最好的解决方案是为您的站点使用受信任的证书。自letsencrypt.org推出以来,确实没有任何借口在您的网站上没有受信任的证书。