我正在尝试如何使用证书限制对API的访问。我的问题是,我无法使证书真正通过API。
这就是我设置HttpClient
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(new X509Certificate2("certificate.cer"));
var httpClient = new HttpClient(handler);
httpClient.BaseAddress = new Uri("http://localhost:54261/api/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
现在,在服务器端,在自定义AuthorizationHandler
中,我注入IHttpContextAccessor
,然后尝试获得这样的证书
var clientCertificate = _httpContextAccessor.HttpContext.Connection.ClientCertificate;
不幸的是,clientCertificate
始终为空。
我使用此软件生成了自签名证书: http://www.itiverba.com/en/software/itisscg.php
我只是生成了一个证书,即一个CA。然后,我生成了由先前生成的CA证书签名的普通证书。我选择将它们都复制到证书存储中。
我尝试了类似的步骤
SslNegotiateCert
中的applicationhost.config
添加到sslFalgs
最后,证书为空。我可以要求一些指导,什么地方错了?