在.Net中调用Web服务时,绕过无效的SSL证书错误

我们正在build立一个新的SharePoint,我们还没有一个有效的SSL证书。 我想调用它的列表web服务来检索有关设置的元数据。 但是,当我尝试这样做,我得到的例外:

底层连接已closures:无法build立SSL / TLS安全通道的信任关系。

嵌套exception包含错误消息:

根据validation程序,远程证书无效。

这是正确的,因为我们正在使用临时证书。

我的问题是:我怎么能告诉.Net Web服务客户端( SoapHttpClientProtocol )忽略这些错误?

我遇到这个问题时使用的方法是将临时证书的签名人添加到相关计算机上的信任当局列表中。

我通常使用CACERT创build的证书进行testing,并将其添加到我信任的权限列表中。

这样做意味着您不必将任何自定义代码添加到您的应用程序中,并且可以正确模拟部署应用程序时会发生的情况。 因此,我认为这是以编程方式closures检查的优越解决scheme。

或者,您可以注册一个忽略authentication错误的回拨委托:

... ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; ... static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) { // Ignore errors return true; } 

像Jason S的回答:

 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

我把这个在我的主,并期待我的app.config和testing如果(ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")之前调用该行的代码。

我这样解决了它:

在调用导致该错误的ssl webservice之前,请调用以下命令:

 using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; /// <summary> /// solution for exception /// System.Net.WebException: /// The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. /// </summary> public static void BypassCertificateError() { ServicePointManager.ServerCertificateValidationCallback += delegate( Object sender1, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; } 

我有使用DownloadString相同的错误; 并能够使其工作如下,在这个页面上的build议

 System.Net.WebClient client = new System.Net.WebClient(); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; string sHttpResonse = client.DownloadString(sUrl); 
 ServicePointManager.ServerCertificateValidationCallback += (mender, certificate, chain, sslPolicyErrors) => true; 

将绕过invaild SSL。 把它写到你的web服务构造函数中。

为了进一步扩展Simon Johnsons的文章 – 理想情况下,你需要一个解决scheme来模拟你将在生产中看到的条件,修改你的代码不会这样做,如果你忘记在部署代码之前忘记代码,这可能是危险的。

您将需要某种自签名证书。 如果您使用的是IIS Express,则您将拥有其中一个,您只需要find它。 打开Firefox或任何你喜欢的浏览器,并去你的开发网站。 您应该能够从URL栏中查看证书信息,根据您的浏览器,您应该能够将证书导出到文件。

接下来,打开MMC.exe,并添加证书pipe理单元。 将您的证书文件导入“受信任的根证书颁发机构”存储区,这就是您所需要的一切。 确保它进入商店而不是像“个人”这样的其他商店是很重要的。 如果你不熟悉MMC或证书,有许多网站提供了如何做到这一点的信息。

现在,整个计算机将隐式地信任它自己生成的任何证书,并且不需要添加代码来专门处理它。 当您转入生产时,只要您在那里安装了适当的有效证书,它将继续工作。 不要在生产服务器上这样做 – 这样做会很糟糕,而且除了服务器本身以外的任何其他客户端都无法工作。

对于新手来说,你可以在一个单独的cs文件中扩展你的部分服务类,并添加代码“imanabidi”提供的代码,使其集成