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 密码套件进行。
我们正在尝试使用 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 密码套件进行。