.Net 3.5 上的 Web 服务客户端应用程序的 SSL 和过时的 TLS(1.0 和 1.1)
SSL and Outdated TLS(1.0 and 1.1) for Web Service client application on .Net 3.5
根据 PCI,我们需要从 2016 年 6 月 30 日起停止使用 SSL 和 TLS(在某些实现中为 1.0 和 1.1)
http://blog.securitymetrics.com/2015/04/pci-3-1-ssl-and-tls.html
我们有一个基于 .Net 3.5 的客户端应用程序,它使用 HttpWebRequest 对象连接到 Web 服务。
根据 MSDN SecurityProtocolType(https://msdn.microsoft.com/en-us/library/system.net.securityprotocoltype(v=vs.110).aspx) 在 .Net Framework 4 或更低版本上仅支持 Ssl3 和 Tls(1.0)。 Tls11 和 Tls12 仅在 .Net Framework 4.5/4.6 中受支持
这是否意味着要在 Cardholder 数据环境中并完全兼容 pci,我们需要将所有应用程序升级到 .Net 4.5/4.6 并仅允许 Tls12 SecurityProtocolType 使用 HttpWebRequest 连接到外部 Web 服务?
当前使用 SSL/early TLS 或愿意在协商中接受它们并且作为安全控制的持卡人数据环境的一部分的任何通信通道都需要更改,以便仅使用 TLS 1.1(具有经批准的密码套件)或更高版本。
您需要在 .Net 4.5 或更高版本下重新编译(默认情况下不启用 TLS 1.2,因此需要更改代码)或使用支持所需协议的第 3 方库。
请注意,如果您知道您的系统正在使用 SSL/early TLS,您必须创建风险缓解措施 plan/document。
微软为此做出了不可思议的努力并发布了补丁
- KB3154518 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win7 SP1/Win 2008 R2 SP1
- KB3154519 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win8 RTM/Win 2012 RTM
- KB3154520 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win8.1RTM/Win 2012 R2 RTM
- KB3156421 - 1605 修补程序汇总通过 Windows 更新 Windows 10.
实际上,您可以在低于 4.5 的框架中使用 TLS 1.2(至少我在 .NET Framework 4 客户端中管理它)。您可以使用此协议的 id 绕过它,而不是使用经典命令将协议设置为 Tls12。
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
他们似乎没有做的一件事是更新 wsdl.exe 以支持 TLS1.1 或 1.2。如果您尝试将 wsdle.exe 从 .Net 4.7 指向不支持 TLS1.0 的 Web 服务,就会发生这种情况:
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 4.7.2558.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Error: There was an error processing 'http://<some.domain>/_vti_bin/Authentication.asmx?wsdl'.
- There was an error downloading 'http://<some.domain>/_vti_bin/Authentication.asmx?wsdl'.
- The underlying connection was closed: An unexpected error occurred on a send.
- Authentication failed because the remote party has closed the transport stream.
这给我带来了一些实际问题,令我震惊的是这个应用程序仍然没有更新!
根据 PCI,我们需要从 2016 年 6 月 30 日起停止使用 SSL 和 TLS(在某些实现中为 1.0 和 1.1) http://blog.securitymetrics.com/2015/04/pci-3-1-ssl-and-tls.html
我们有一个基于 .Net 3.5 的客户端应用程序,它使用 HttpWebRequest 对象连接到 Web 服务。
根据 MSDN SecurityProtocolType(https://msdn.microsoft.com/en-us/library/system.net.securityprotocoltype(v=vs.110).aspx) 在 .Net Framework 4 或更低版本上仅支持 Ssl3 和 Tls(1.0)。 Tls11 和 Tls12 仅在 .Net Framework 4.5/4.6 中受支持
这是否意味着要在 Cardholder 数据环境中并完全兼容 pci,我们需要将所有应用程序升级到 .Net 4.5/4.6 并仅允许 Tls12 SecurityProtocolType 使用 HttpWebRequest 连接到外部 Web 服务?
当前使用 SSL/early TLS 或愿意在协商中接受它们并且作为安全控制的持卡人数据环境的一部分的任何通信通道都需要更改,以便仅使用 TLS 1.1(具有经批准的密码套件)或更高版本。
您需要在 .Net 4.5 或更高版本下重新编译(默认情况下不启用 TLS 1.2,因此需要更改代码)或使用支持所需协议的第 3 方库。
请注意,如果您知道您的系统正在使用 SSL/early TLS,您必须创建风险缓解措施 plan/document。
微软为此做出了不可思议的努力并发布了补丁
- KB3154518 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win7 SP1/Win 2008 R2 SP1
- KB3154519 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win8 RTM/Win 2012 RTM
- KB3154520 - 可靠性汇总 HR-1605 - NDP 2.0 SP2 - Win8.1RTM/Win 2012 R2 RTM
- KB3156421 - 1605 修补程序汇总通过 Windows 更新 Windows 10.
实际上,您可以在低于 4.5 的框架中使用 TLS 1.2(至少我在 .NET Framework 4 客户端中管理它)。您可以使用此协议的 id 绕过它,而不是使用经典命令将协议设置为 Tls12。
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
他们似乎没有做的一件事是更新 wsdl.exe 以支持 TLS1.1 或 1.2。如果您尝试将 wsdle.exe 从 .Net 4.7 指向不支持 TLS1.0 的 Web 服务,就会发生这种情况:
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 4.7.2558.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Error: There was an error processing 'http://<some.domain>/_vti_bin/Authentication.asmx?wsdl'.
- There was an error downloading 'http://<some.domain>/_vti_bin/Authentication.asmx?wsdl'.
- The underlying connection was closed: An unexpected error occurred on a send.
- Authentication failed because the remote party has closed the transport stream.
这给我带来了一些实际问题,令我震惊的是这个应用程序仍然没有更新!