ServicePointManager.ServerCertificateValidationCallback无法在Windows Server 2012 R2上运行

时间:2016-07-14 21:51:03

标签: c# .net ssl windows-server-2012-r2

在我们的应用程序部署到我们的生产环境之前,我们在.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上的证书警告?

1 个答案:

答案 0 :(得分:0)

我将以不同的方式处理此问题,我创建了一个与错误消息相关的question并请求解决建议。