我们正在设置一个新的SharePoint,但我们还没有有效的SSL证书。我想在其上调用Lists Web服务以检索有关该设置的一些元数据。但是,当我尝试执行此操作时,出现异常:
基础连接已关闭:无法为SSL / TLS安全通道建立信任关系。
嵌套异常包含错误消息:
根据验证过程,远程证书无效。
这是正确的,因为我们使用的是临时证书。
我的问题是:如何告诉.Net Web服务客户端(SoapHttpClientProtocol)忽略这些错误?
Answers:
或者,您可以注册一个忽略认证错误的回叫代表:
...
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; };
我将其放在Main中,app.config
并(ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")
在调用该代码行之前查看并测试是否。
我是这样解决的:
在调用导致该错误的ssl网络服务之前,请调用以下命令:
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时出现相同的错误;并使其能够按以下方式工作,并在此页面上提供建议
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;
将绕过无效的ssl。将其写入您的Web服务构造函数。
要进一步扩展Simon Johnsons的职位-理想情况下,您需要一个解决方案来模拟您将在生产中看到的条件,并且修改代码不会这样做,并且如果您忘记在部署之前删除代码,可能会很危险。
您将需要某种自签名证书。如果您使用的是IIS Express,则已经拥有其中之一,您只需找到它即可。打开Firefox或任何您喜欢的浏览器,然后转到开发人员网站。您应该能够从URL栏中查看证书信息,并且取决于浏览器,您应该能够将证书导出到文件中。
接下来,打开MMC.exe,并添加“证书”管理单元。将您的证书文件导入“受信任的根证书颁发机构”存储,这就是您所需要的。重要的是要确保它进入该商店,而不是像“个人”这样的其他商店。如果您不熟悉MMC或证书,则有许多网站提供有关如何执行此操作的信息。
现在,您的计算机作为一个整体将隐式信任它自己生成的所有证书,并且您无需添加代码来专门处理此证书。当您进入生产环境时,只要您在那里安装了正确的有效证书,它将继续工作。不要在生产服务器上执行此操作-这很不好,除了服务器本身上的客户端以外,其他客户端都无法使用。