【发布时间】:2016-12-01 20:52:52
【问题描述】:
我正在尝试通过 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 中没有可能存在的冲突设置。任何帮助将不胜感激。
【问题讨论】:
-
@Beorn 如果您使用的是 IIS - 转到“SSL 设置”并确保客户端证书是“接受”而不是“忽略”(默认值)。如果它设置为忽略 - 无论您做什么,证书都将为空。
-
@Evk 已经试过了,证书还是空
-
@Beorn 然后很难进一步提供帮助,因为我测试了问题中提供的代码并且它工作正常(如果您设置“接受”设置)。很好,我的意思是,在我的情况下,如果证书无效,它至少会引发异常。也许您可以生成一些您遇到问题的测试证书并将其发布到某个地方?
标签: c# asp.net security x509 mutual-authentication