0

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

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

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

牢记这一点,有没有办法在 Windows Server 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]);
    }

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

4

1 回答 1

0

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

IT部门后来安装了​<a href="https://support.microsoft.com/en-us/kb/948963" rel="nofollow">https://support.microsoft.com/en-us/kb /948963 Windows 2003 服务器上的窗口补丁,它安装了 AES 密码套件。安装此补丁后,通信开始工作,但间歇性且不一致。

最后,我们尝试了http://www.chilkatsoft.com/HttpDotNet.asp上提供的 Chilkat Http 组件,它成功了,现在 API 调用使用 P12 证书、TLS 1.0 协议和 AES 密码套件始终如一地发生。

于 2015-05-30T18:48:21.810 回答