我的代码使服务器端调用另一个Web服务。在许多情况下,这是通过SSL。当星星没有完全对齐时,我们遇到问题。我意识到证书必须是可信的,并且内部证书颁发机构(CA)可能必须手动导入服务器上的受信任根证书存储区。但是,还有其他情况。今天我遇到了一个问题,如果我使用浏览器点击URL,我会收到警告,说明:
安全证书上的名称无效或与网站名称不匹配
这只是一个警告,您可以通过浏览器确认并告诉它继续访问该网站。
然而,它似乎阻止了我的代码工作。这是我的代码的精简版本:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential(user, password);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
在查看HttpWebRequest时,我没有看到任何可以帮助我的明显事实,而且我目前在开发人员环境中没有尝试过任何事情。我可以做一个简单的修改来解决这个问题吗?还有其他类似的陷阱我也可以阻止这种方式吗?
答案 0 :(得分:1)
Kirk,您是否考虑过使用ServerCertificateValidationCallback并返回true(作为测试),然后针对特殊情况增加错误检查?您还可以查看What is the best way of handling non-validating SSL certificates in C#以了解有关检查cer的其他信息
工作解决方案:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential(user, password);
ServicePointManager.ServerCertificateValidationCallback = delegate(object certsender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
另请参阅SSLPolicyErrors,了解要在代理中审核的枚举。