Я создал сертификат в хранилище ключей 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, но это не имеет значения.