我需要使用我们合作伙伴之一的Web API。他们的API要求我使用证书进行连接。
我不想在我们的服务器(VM)上安装证书。这与我们的凤凰服务器策略适得其反。
我尝试以编程方式使用证书。问题是我得到一个错误:
AuthenticationException:根据验证过程,远程证书无效。
我HttpClient
使用以下代码创建我的代码:
_certificate = new X509Certificate2(_certificateFile);
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(_certificate);
var client = new HttpClient(handler) { BaseAddress = new Uri(_url) };
我可以通过覆盖证书验证来使其工作:
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
但是,这看起来很糟糕。
我已验证我的端点与证书中的CN相匹配
是否AuthenticationException
仅仅是因为证书未安装在证书存储区中?
如果是,我可以使用代码临时安装证书并在以后将其删除吗?
“远程证书无效”表示.NET Framework认为合作伙伴的Web服务的服务器端证书无效(如果没有安装必要的根/中间证书,则非常正常)。
您可以通过更改来取消默认检查ServerCertificateValidationCallback
,但是您应该实施自己的检查,以确保以合理的方式验证其证书以避免攻击。
您还应该使用HttpClientHandler.ServerCertificateValidationCallback
,以便您的自定义验证器仅在此特定HttpClient
实例的范围内生效,而在您应用的其他位置不起作用,
但是,他们提供给您的证书(通常是客户端证书)是由其Web服务而不是在您的计算机上本地验证的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句