Сертификат HttpClient при размещении в приложении IIS / Asp.NET не работает - PullRequest
0 голосов
/ 16 мая 2018

У меня странная проблема.Мне нужно выполнить запрос SSL с использованием сертификата клиента CER к серверу, который требует аутентификации по этому сертификату.

Я использую код ниже:

   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;

Этот код отлично работает, когдаЯ втискиваю ConsoleApplicaiton или WebApplication в IIS Express.

Но когда я втискиваю точно такой же код в Local IIS или IIS Server, я получаю ошибку 401-Unauthorized.Странно то, что при использовании Fiddler в этом случае я даже не вижу попытки запроса.

Я уже проверил, что путь не является проблемой.Проблема возникает в .NET 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1 и т. Д.

Может кто-нибудь мне помочь, это любая конфигурация, которая должна быть выполнена в IIS.Я много исследовал, но не нашел этой конкретной ошибки.

1 Ответ

0 голосов
/ 16 мая 2018
Файл

A .cer на стороне клиента не содержит закрытого ключа, поэтому обычно он не работает, если сервер требует взаимного SSL / TLS. Вам необходимо получить действительный сертификат с закрытым ключом (обычно файл .pfx).

...