我可以编写HTTP请求来解决SSL警告问题吗?

时间:2011-04-27 22:58:40

标签: http ssl

我的代码使服务器端调用另一个Web服务。在许多情况下,这是通过SSL。当星星没有完全对齐时,我们遇到问题。我意识到证书必须是可信的,并且内部证书颁发机构(CA)可能必须手动导入服务器上的受信任根证书存储区。但是,还有其他情况。今天我遇到了一个问题,如果我使用浏览器点击URL,我会收到警告,说明:

  

安全证书上的名称无效或与网站名称不匹配

这只是一个警告,您可以通过浏览器确认并告诉它继续访问该网站。

然而,它似乎阻止了我的代码工作。这是我的代码的精简版本:

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential(user, password);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

在查看HttpWebRequest时,我没有看到任何可以帮助我的明显事实,而且我目前在开发人员环境中没有尝试过任何事情。我可以做一个简单的修改来解决这个问题吗?还有其他类似的陷阱我也可以阻止这种方式吗?

1 个答案:

答案 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,了解要在代理中审核的枚举。