我正在尝试从HTTP请求访问我的Web API中的客户端证书。我附上证书如下:
X509Certificate2 clientCert = GetClientCertificate();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://localhost:44366/test");
request.KeepAlive = true;
request.Method = "GET";
request.Accept = "application/json";
request.ClientCertificates.Clear();
request.ClientCertificates.Add(clientCert);
var response = (HttpWebResponse) request.GetResponse();
GetClientCertificate()
访问本地安装的证书。从我的WebApi内部,我有以下路线:
[HttpGet]
[Route("test")]
public HttpResponseMessage TestNoAuth()
{
X509Certificate2 cert = Request.GetClientCertificate();
return cert == null ? Request.CreateResponse(HttpStatusCode.BadRequest, "No cert") : Request.CreateResponse(HttpStatusCode.OK, "Cert attached");
}
无论我尝试什么,cert
总会回来null
。我是否错误地附加了证书,或者尝试错误地访问它?我已经用这条测试路线创建了一个全新的WebAPI,以确保我们的开发API中没有可能存在冲突的设置。任何帮助将不胜感激。
答案 0 :(得分:1)
确保您的web.config正确地将sslFlags
设置为SslNegotiateCert
:
<system.webServer>
<security>
<access sslFlags="SslNegotiateCert" />
</security>
</system.webServer>
如果没有此设置,将忽略附加到请求的任何证书,有关详细信息,请参阅this。
有很多关于在Andras Nemes中使用.NET的客户端证书的文章。在this one中详细介绍了如何为本地测试使用设置客户端证书。
答案 1 :(得分:0)
您必须在IIS中设置客户端证书设置。一旦你这样做了 请确保将证书链中的任何中间证书添加到受信任的根存储。 此WebApi应该能够收到证书。