如何解决GetClientCert没有在IIS托管的api上使用
我尝试在WEB API上手动验证证书。问题一直存在,GetClientCertificate
仅返回null。
var certRequest= actionContext.Request.GetClientCertificate();
certRequest == null ? "Certificate not found" : $"Certificate found";
IIS网站就像https://testapi.web.com 附加在SSL上的证书文件显示为DNS = *。web.com。 证书存储区中还有另一个证书文件,但未与HTTPS绑定一起映射。 该DNS = cl-testapi.web.com
我尝试提供来自客户端调用的证书文件,并且每次都提供GetClientCertificate
文件为空的文件。
client side code:
var handler = new HttpClientHandler()
{
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls | SslProtocols.Ssl3 | SslProtocols.Ssl2
};
handler.ClientCertificates.Add(new X509Certificate2(@"c:\testcert.cer"));
var client = new HttpClient(handler);
var data = new StringContent([xmlcontent],Encoding.UTF8,"application/xml");
var result = client.PostAsync("https://testapi.web.com",data).GetAwaiter().GetResult();
var resultString = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
任何人都可以建议这是什么问题吗
已验证,IIS具有“接受”作为SSL设置。此外,两个证书文件均有效,并且在使用“ GetClientCert”时,nighter可以在服务器api上进行选择。
//////////// 尝试过使用证书文件在客户端证书存储上进行搜索并附加
var handler = new HttpClientHandler()
{
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls | SslProtocols.Ssl3 | SslProtocols.Ssl2
};
X509Store store = new X509Store(StoreName.My,StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certCollection = store.Certificates.Find(X509FindType.FindByThumbprint,"thumbprintGUID COPIED FROM CLIENT CERT",false);
handler.ClientCertificates.Add(certCollection[0]);
var client = new HttpClient(handler);
// notes,certCollection[0].HasPrivateKey
是false
。
更新:
现在请求使用PFX文件和密码。我可以看到,私钥存在是真的。
certCollection[0].HasPrivateKey
在这里true
。但是,没有收到GetClientCert。
解决方法
您可以尝试更正c:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys文件夹上的权限,以解决10013错误。
- 所有人访问权限:特殊适用于:仅此文件夹
- 网络服务访问:读取和执行应用于:此文件夹,子文件夹和文件
- 管理员访问权限:完全控制权限应用于:此文件夹,子文件夹和文件
- 系统访问:完全控制应用于:此文件夹,子文件夹和文件
- IUSR访问:完全控制应用于:此文件夹,子文件夹和文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。