Windows 2003 服务器:请求已中止。无法创建 SSL/TLS 安全通道

Windows 2003 server: The request was aborted. Could not create SSL/TLS secure channel

我们正在尝试使用 System.Net.HttpWebRequest (C# .Net 3.5) 调用 public API,它使用证书对数据进行身份验证和加密。从 Windows 8.1 系统调用 APIs 时,我们看到 API 调用成功进行。但是从 Windows 2003 服务器调用 APIs 时,它失败并出现以下错误。

请求被中止:无法创建 SSL/TLS 安全通道。

所需的 P12 文件和 .cert(证书颁发机构)已在两个系统中正确安装。似乎 public API 支持 TLS1.1+ 协议(不完全确定但猜测,已经询问 API 支持团队确认相同),其中 Windows 2003服务器仅支持 SSLv3 或 TLS1.0。这似乎是一个问题。不幸的是,我们有一段时间没有升级服务器的选项,我们只在系统上安装了 .Net 3.5 以及使用 Net 3.5 构建的应用程序。

记住这一点,是否有任何方法可以在 Windows 服务器 2003 上验证围绕此问题的根本原因,或者是否可以通过更改协议在源代码中支持 TLS1.1+?

.Net 4.0 中有选项可以将 SecurityProtocol 更改为 TLS11 或 TLS12,但由于无法将应用程序(作为应用程序套件的一部分)升级到 .Net 4.0,这似乎很难做到。



    HttpWebRequest request = new HttpWebRequest(address);

    ServicePointManager.Expect100Continue = true;
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

    X509Store store = new X509Store("My", StoreLocation.LocalMachine);

    // Open the store.
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

    X509Certificate2Collection coll = store.Certificates.Find(X509FindType.FindBySubjectName, "test", false);

    if (coll != null && coll.Count > 0)
    {
       request.ClientCertificates.Add(coll[0]);
    }

感谢您的帮助和时间。谢谢

经过进一步分析,我们发现服务器确实支持 TLS 1.0 和 SSLv3,但应用程序仍然无法使用证书与服务器通信,出现同样的错误,即使 Windows 2003 也支持这些协议。

IT 部门后来在 Windows 2003 服务器上安装了 https://support.microsoft.com/en-us/kb/948963 window 补丁,其中安装了 AES 密码套件。安装此补丁后,通信开始工作但时断时续且不一致。

最后我们尝试了 http://www.chilkatsoft.com/HttpDotNet.asp 上可用的 Chilkat Http 组件,它成功了,现在 API 调用一直在使用 P12 证书、TLS 1.0 协议和 AES 密码套件进行。