【发布时间】:2020-06-16 05:59:10
【问题描述】:
我有一个接受客户端证书的 ASP Web Api (.Net Framework 4.6.1)。要求是在具有无效证书的请求的响应中发送自定义验证消息。 例如,如果证书丢失,我应该发回“客户端证书丢失”,如果 OCSP 验证失败,我应该发回“证书已被撤销”等。 这是代码:
public class CertificateMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
var certificate = request.GetClientCertificate();
}
}
我有一个客户端应用程序,我可以在其中选择要使用的证书,它会向 Web api 应用程序(托管在另一台机器上)发出请求。如果证书有效,则request.GetClientCertificates()返回证书,否则,如果证书过期或自签名,request.GetClientCertificates()返回null。
我已禁用 IIS 的自动 CLR 验证:
netsh http show sslcert
netsh http delete sslcert ipport=0.0.0.0:443
netsh http add sslcert ipport=0.0.0.0:443 e104e... appid={4dc3e181-...} certstorename=My verifyclientcertrevocation=disable
我已经设置了:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo\0.0.0.0:443\DefaultSslCertCheckMode=1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList=0
以上设置均无效。
注意:使用 Web 应用程序的第 3 方可能会发送自签名证书,业务逻辑应拒绝此类证书的请求,因此包含使用的 CA无法在受信任的根存储中签署证书。
感谢任何有关如何从请求中获取客户端证书的帮助。
编辑:在 IIS 将请求“转发”到我的应用程序之前,模块“IIS Web Core”似乎根据证书存储方式验证证书:
【问题讨论】:
标签: asp.net iis ssl-certificate webapi