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

标签 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 中执行任何配置。我研究了很多,但没有发现具体的错误。

最佳答案

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

关于c# - 托管在 IIS/Asp.NET 应用程序中的 HttpClient 证书不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359381/

相关文章:

angular - 在子文件夹下部署 Angular SPA

IIS 多域重定向

c# - 如何配置 Automapper 4 以允许空目标值

c# - MembershipUser 类 - Comments 方法不起作用?

iis - IIS7 中的 DefaultAppPool 和经典 .NET AppPool 有什么区别?

javascript - 当我同时使用 Onclick 和 OnClientClick 时 OnClick 不工作

asp.net - 何时启用/禁用 Viewstate

c# - 此代码示例中的 @ 是什么意思?

C# LINQ Distinct(IEqualityComparer) 帮助

c# - AES C# 文件加密 - 流只写入 16 个字节