在我们的应用程序部署到我们的生产环境之前,我们在.NET Web应用程序的较低环境中调用数字API。承载API的那些服务器往往没有由受信任的证书颁发机构签名的证书。
我创建了以下代码作为解决方法,可以安全地排除在我们的生产环境中运行此代码:
if (ignoreCertErrors && environmentName.ToLower() != "PROD")
{
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
}
ignoreCertErrors和environmentName都是提供给包含此逻辑的方法的参数。
这适用于我的本地开发盒(Windows 7)但是当我将其部署到Windows 2012 R2测试服务器时,我对具有不受信任的证书的API的调用仍然失败,并出现以下错误:
=============================================== ================== 消息:基础连接已关闭:意外错误 在发送时发生。堆栈跟踪:
在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResultar)=============================================== ================== 消息:无法从传输连接读取数据: 远程主机强行关闭现有连接。堆 跟踪:
在System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
在System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)=============================================== ================== 消息:远程主机强制关闭现有连接 堆栈跟踪:
在System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
在System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)=============================================== ==================
我是否需要更改此逻辑,或者执行一些新操作以忽略Windows Server 2012 R2上的证书警告?