我知道有很多人要求这样做,但我想我已经阅读了答案和问题,但现在已经太久了。
我有一个调用 Web 服务的 C# 应用程序。在Windows 10上一切正常,但是当我在Windows 7(或Windows Server 2008 R2或Windows Server 2012(上运行该应用程序时,会抛出异常"无法创建SSL/TLS安全通道"。
我正在使用 TLS1.2 和 .NET Framework 4.5(说实话,真正的应用程序是 4.0,我正在使用一种解决方法来启用 TLS1.2,但我创建了一个具有 4.5 和本机 TLS1.2 管理的测试应用程序,仍然有同样的问题:所以它与解决方法无关(。
与Postman的相同调用即使在Windows7中也能很好地工作。
这是我的代码
public static LicenseInfoDTO GetLicenseInfo()
{
LicenseInfoDTO result = null;
Uri uri =_myUri;
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.Expect100Continue = true;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Accept = "application/json";
request.Headers.Add("AuthToken", SECURITY_TOKEN);
request.Method = "GET";
WebResponse response = request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
JsonSerializer serializer = new JsonSerializer();
result = (LicenseInfoDTO)serializer.Deserialize(reader, typeof(LicenseInfoDTO));
}
}
catch (Exception ex)
{
logger.Error($"Error calling SEQUAR to get info for license {license}", ex);
}
return result;
}
我已经尝试过使用此处(以及网络上的许多答案(找到的"Microsoft EasyFix",但没有结果。 https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
我还对我发现的系统注册表进行了几乎所有更改组合。
我要检查密码,但我不是那么专业,不知道在不随机搜索奇怪的东西的情况下去哪里看。
有人对此有神奇的解决方案吗?这让我们发疯。
谢谢!
编辑:使用http而不是https它可以工作。
最后,我们想通了:似乎.NET Framework使用Internet Explorer密码来保护https调用。在Windows 7中,IE11不支持任何安装在服务器端的密码:这就是无法创建安全SSL/TLS通道的原因。
我们解决了这个问题,增加了一个较旧的密码服务器端,但我们计划包括Curl(https://curl.haxx.se/windows/(以避免使用不安全的密码。
这是一个非常漫长的一周,我希望这个自动回答有一天能帮助那里的人。
为了使其成功,您需要将 .NET 框架更新到 4.6.2 或更高版本。下面的链接引用了以下句子:">NET Framework 4.6.2 及更高版本支持 TLS 1.1 和 TLS 1.2。"否则,此修补程序将不起作用。
https://learn.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-client