使用HttpClient信任自签名证书

时间:2016-06-09 09:27:56

标签: c# .net ssl ssl-certificate dotnet-httpclient

我已按照this教程创建了自签名CA证书,然后根据CA证书创建了自签名SSL证书。然后,我在IIS中安装了SSL证书,以通过本地IP地址访问我的内部网站,例如10.0.0.1。我想使用HttpClient向网站发出请求,如下所示:

using (var httpClient = new HttpClient())
{
    var text = await httpClient.GetStringAsync("https://52.19.32.61:5010");
}

我已将自签名CA证书添加到本地计算机受信任的根证书中,但是,我仍然收到以下异常(任何答案告诉我关闭SSL验证都没有帮助。):

  

System.Net.Http.HttpRequestException:发送时发生错误   请求。 System.Net.WebException:底层连接是   已关闭:无法为SSL / TLS安全建立信任关系   渠道。 System.Security.Authentication.AuthenticationException:The   根据验证程序,远程证书无效。

1 个答案:

答案 0 :(得分:1)

SelfSigned CA必须位于服务器上以及连接到服务器的任何客户端上的LocalMachine \ Root存储中。

SSL证书应具有客户端将用于连接到它的确切DNS名称。它可以在主题备用名称(SAN)扩展中的证书中指定多个DNS名称。在您的情况下,您正在使用IP地址

  • 您将IP地址放在SAN或
  • 您将IP地址放在hosts文件中,并使用您在发出SSL证书时指定的DNS名称并在HttpClient中使用此DNS名称

您可以考虑使用XCA颁发证书。它有很好的GUI,建立在OpenSSL之上。它具有CA和SSL服务器的预定义模板。有关详细信息,请参见文档here