代码之家  ›  专栏  ›  技术社区  ›  Fabio Avila

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

  •  3
  • Fabio Avila  · 技术社区  · 6 年前

    我有一个奇怪的问题。 我需要使用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中的控制台应用程序或Web应用程序时,这段代码非常有效。

    但是,当我在本地IIS或IIS服务器中压缩完全相同的代码时,会出现401未经授权的错误。奇怪的是,在使用Fiddler时,我甚至看不到请求尝试。

    我已经检查过路径不是问题所在。 问题出现了。净额4.5、4.5.1、4.5.2、4.6、4.6.1等。。

    有人能帮我一下吗,是不是应该在IIS中执行任何配置。我做了很多研究,但没有发现具体的错误。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Lex Li    6 年前

    A. .cer 客户端的文件不包含私钥,所以如果服务器需要相互SSL/TLS,则通常无法使用私钥。您需要使用私钥(通常是 .pfx 文件)。