Сертификат клиента всегда нулевой - PullRequest
0 голосов
/ 22 февраля 2019

У меня установлен сертификат в Личный , а также Доверенные корневые центры сертификации

Попытался использовать этот бит кода для отправки на конечную точку:

public void Post()
    {
        try
        {
            var clientCert = LoadFromStore("MyThumbprint");
            var requestHandler = new WebRequestHandler();

            requestHandler.ClientCertificates.Add(clientCert);

            var client = new HttpClient(requestHandler)
            {
                BaseAddress = new Uri("https://localhost:44430/")
            };

            var response = client.GetAsync("api/test").Result;
            response.EnsureSuccessStatusCode();

            string responseContent = response.Content.ReadAsStringAsync().Result;
            Console.WriteLine(responseContent);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception while executing the test code: {0}", ex.Message);
        }
    }

При проверке свойство .ClientCertificate всегда равно нулю.

 [Route("api/[controller]")]
public class TestController : Controller
{
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
        if (clientCertInRequest != null) return Ok();

        return BadRequest("No certificate found");
    }

}

Интересно, сталкивался ли кто-нибудь с этой проблемой раньше или знаетспособ отправки сертификата в конечную точку webapi и возможность извлечения и проверки?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы должны знать, что на стороне сервера в ответе сертификат зависит от типа сертификата / содержимого сертификата.У меня была такая же проблема, когда я нажимал самоподписанный сертификат (сгенерированный локально в IIS): на сервере в запросе сертификат всегда был нулевым.Но когда я нажал обычный (общедоступный) сертификат с цепной иерархией - я был удивлен, потому что получил сертификат !!

Поэтому я рекомендую впервые создать публичный сертификат в бесплатных центрах сертификации, таких как https://www.sslforfree.com/

0 голосов
/ 21 марта 2019
  1. Убедитесь, что вы используете реальный IIS и не экспресс
  2. Настройте IIS так, чтобы он принимал сертификаты
  3. Настройка сопоставленных сертификатов в конфигурации или активном каталоге
  4. Попробуйте запрос в браузере иПосмотрите, появляется ли диалоговое окно выбора сертификата
    • , если нет диагностики на основе кода суб-статуса HTTP Error
    • , если это так, запустите ваш код еще раз
...