我们正在尝试使用 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]);
}
感谢您的帮助和时间。谢谢。