Использование сертификата Azure X509 из хранилища ключей - PullRequest
0 голосов
/ 04 ноября 2019

Я создал сертификат в хранилище ключей Azure и пытаюсь использовать его для вызова API со службами. AddHttpClient для его подключения

 .ConfigurePrimaryHttpMessageHandler(s =>
{
    var handler = new CertHttpClientHandler(cerificateBundle);
    return handler;
})

Мой клиентский модуль передается CerificateBundle, который он использует дляполучить сведения о сертификате из хранилища (свойство Cer)

public class CertHttpClientHandler : HttpClientHandler
{
    public CertHttpClientHandler(CertificateBundle cerificateBundle)
    {
        this.AllowAutoRedirect = true;
        this.UseDefaultCredentials = true;
        this.ClientCertificateOptions = ClientCertificateOption.Manual;
        this.ClientCertificates.Add(new X509Certificate2(cerificateBundle?.Cer));
        this.CheckCertificateRevocationList = false;
    }
}

Все это, очевидно, работает нормально, но затем, когда я пытаюсь использовать сертификат из вызываемого приложения, я не могу его проверить.

public class ValuesController : ApiController
{
    public HttpResponseMessage Get()
    {
        var clientCertInRequest = Request.GetClientCertificate();

        if (clientCertInRequest == null || (!clientCertInRequest.Verify() || clientCertInRequest.SerialNumber != "Test"))
        {
            return Request.CreateResponse(HttpStatusCode.NotFound, "Sorry");
        }

        var responseBody = new[] {"value1", "value2"};
        return Request.CreateResponse(HttpStatusCode.OK, responseBody);
    } 
}

GetClientCertificate всегда возвращает ноль. Я взял сертификат из хранилища и поместил его в хранилище сертификатов Windows.

Что я делаю не так? Я также попытался передать сертификат вручную в переменной заголовка X-ARR-ClientCert, используя GetRawCertDataString, но это не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...