【问题标题】:HttpClient certificate when hosted in IIS/Asp.NET Application not work托管在 IIS/Asp.NET 应用程序中时的 HttpClient 证书不起作用
【发布时间】:2018-05-15 21:26:13
【问题描述】:

我有一个奇怪的问题。 我需要使用 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 中执行任何配置。我研究了很多,但没有发现具体的错误。

【问题讨论】:

  • 客户端的.cer文件不包含私钥,所以如果服务器需要双向SSL/TLS,通常它不会工作。除了服务器管理员之外,没有其他人可以告诉您更多信息,然后您需要获取带有私钥的有效证书(通常是.pfx 文件)。
  • @LexLi 是正确的,您使用的是没有私钥的客户端证书。
  • 你是对的,使用带有 PrivateKey 的一个 .pfx 在所有情况下都有效。谢谢你,你救了我的命。 @LexLi 您可以发布回复以标记为解决方案吗?

标签: c# asp.net iis httpclient x509certificate


【解决方案1】:

客户端的.cer 文件不包含私钥,因此如果服务器需要双向 SSL/TLS,通常它不会工作。您需要获取带有私钥的有效证书(通常是.pfx 文件)。

【讨论】:

    猜你喜欢
    • 2017-03-25
    • 2018-04-26
    • 2020-07-16
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2014-08-25
    相关资源
    最近更新 更多