我在配置我的 asp.net Web api 服务以通过客户端证书对请求进行身份验证时遇到问题
我执行 Pro ASP.NET Web Api Security 中描述的步骤:
- 我使用 makecert.exe 创建证书
makecert.exe -r -n "CN=MobileTradeDataGateway" -pe -sv MobileTradeDataGateway.pvk -a sha256 -cy authority MobileTradeDataGateway.cer
和makecert.exe -iv MobileTradeDataGateway.pvk -ic MobileTradeDataGateway.cer -n "CN=DataGateway1" -pe -sv DataGateway1.pvk -a sha256 -sky exchange DataGateway1.cer -eku 1.3.6.1.5.5.7.3.2
- 我在服务器受信任的根证书颁发机构和客户端中安装了 MobileTradeDataGateway 证书。在客户端个人权限中安装 DataGateway1。
- 将站点配置为接受证书并启用。启用匿名身份验证。
- 创建 DelegatingHandler 并将其添加到 mvc 中的 messagehandlers 集合以检查证书。
调用web api方法
var certStore = new X509Store(StoreLocation.CurrentUser); certStore.Open(OpenFlags.ReadOnly); var collection = certStore.Certificates.Find(X509FindType.FindByIssuerName, "MobileTradeDataGateway", true); var cert = 集合[0]; certStore.Close(); var messageHandler = new WebRequestHandler(); messageHandler.ClientCertificates.Add(cert); var client = new HttpClient(messageHandler) { BaseAddress = new Uri("...") }; var res = client.GetAsync("/api/orderuploader?number=5").Result;
.
在我的机器是服务器的本地机器和网络中一切正常。但是当我将它部署到天蓝色云服务
var cert = request.GetClientCertificate(); // here is null
时,我的自定义委托处理程序中会出现 null
当然,我使 IIS 能够接受证书并正确地将证书放入受信任的根证书颁发机构
有任何想法吗?