У меня установлен сертификат под Личный, а также доверенные корневые центры сертификации
Попробовали использовать этот фрагмент кода для публикации в конечной точке:
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);
}
}
После проверки свойство .КлиентСертификат всегда имеет значение null.
[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 и иметь возможность получить и проверить?
Большое спасибо





Вы должны знать, что на стороне сервера ответный сертификат зависит от типа сертификата/содержимого сертификата. У меня была такая же проблема, когда я нажал самозаверяющий сертификат (сгенерированный локально в IIS): на сервере в сертификате запроса всегда был нулевой. Но когда я нажал обычный (публичный) сертификат с иерархией цепочки - я был удивлен, потому что получил сертификат!!
Поэтому я рекомендую сгенерировать публичный сертификат в первый раз в авторизованных центрах бесплатных сертификатов, таких как https://www.sslforfree.com/.
Также я рекомендую вам посмотреть исходный режим MS Система.Безопасность.Криптография.X509Certificates.x509certificate2 и другие классы!