在IIS / Asp.NET应用程序中托管时的HttpClient证书不起作用

时间:2018-05-15 21:26:14

标签: c# asp.net iis httpclient x509certificate

我有一个奇怪的问题。 我需要使用CER客户端证书向需要通过该证书进行身份验证的服务器执行SSL请求。

我正在使用以下代码:

   var cert = X509Certificate.CreateFromCertFile("cert.cer");

   var handler = new WebRequestHandler();
   handler.ClientCertificates.Add(cert);

   var http_client = new HttpClient(handler);
   http_client.BaseAddress = new Uri("https://service.com/");

   var str_json = JsonConvert.SerializeObject(new
   {
       Field = "Value1",
       Fiesl2 = "Value2"
   });

   var byteContent = new ByteArrayContent(Encoding.UTF8.GetBytes(str_json));
   byteContent.Headers.Remove("Content-Type");
   byteContent.Headers.Add("Content-Type", "application/json");

   var res = http_client.PostAsync("ResourcePath", byteContent).Result;

   res.EnsureSuccessStatusCode(); //THe error 401 ocurrs here

   var res_body = res.Content.ReadAsStringAsync().Result;

当我在IIS Express中挤入ConsoleApplicaiton或WebApplication时,此代码非常有效。

但是当我在本地IIS或IIS服务器中挤出完全相同的代码时,我收到401-Unauthorized错误。奇怪的是,使用Fiddler,在这种情况下我甚至看不到请求尝试。

我已经检查过这条路不是问题。 问题出现在.NET 4.5,4.5.1,4.5.2,4.6,4.6.1等中。

任何人都可以帮助我,是否应该在IIS中执行任何配置。我已经研究了很多,但我没有发现那个特定的错误。

1 个答案:

答案 0 :(得分:2)

客户端的.cer文件不包含私钥,因此如果服务器需要相互SSL / TLS,通常它将不起作用。您需要获得带有私钥的有效证书(通常是.pfx文件)。