[面向IT管理员] 推荐迁移至TLS 1.2
大家好,我是垣内由梨香。
Transport Layer Security (TLS) 用于加密数据并安全地进行交换。虽然许多人在使用TLS,但可能并不清楚具体使用的版本。加密协议并非“只要使用就安全”,重要的是仅使用能够应对当前威胁的版本来降低风险。
微软推荐迁移至更安全的TLS 1.2。
[2020/9/7 更新] 关于各产品和服务中TLS 1.0/1.1的废弃计划,请参考以下信息:TLS 1.0 and 1.1 deprecation https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/tls-1-0-and-1-1-deprecation/ba-p/1620264
与1999年出现并在Windows XP/Windows Server 2003中主要使用的TLS 1.0相比,新版本TLS 1.1和TLS 1.2在安全性方面进行了许多改进。例如,针对TLS 1.0中构成威胁的CBC模式漏洞攻击(如BEAST攻击),TLS 1.1/1.2在规范中预先加入了防护措施。此外,当前最新版本TLS 1.2进一步增强了安全性,支持使用更强的加密算法,如SHA-2系列哈希函数(SHA-256和SHA-384)以及支持认证加密模式的密码套件(如GCM4和CCM5)。最近,IETF正在推进TLS 1.3的标准化讨论。
当前最新的TLS 1.2在Windows 7及更高版本中默认搭载,但由于兼容性问题,默认可能被禁用,或者TLS 1.0/TLS 1.1同时被启用。随着Windows XP和Windows Server 2003的支持结束,以及整个行业对TLS 1.1/1.2的实现推进,需要TLS 1.0的连接环境正在减少。在建立TLS连接时,会使用客户端和服务器双方都能支持的最高版本TLS。例如,如果双方都支持TLS 1.2,即使其他版本的TLS被启用,也会使用最高版本的TLS 1.2。然而,为了防范攻击者的版本回滚攻击等未来威胁,在没有必要使用旧版本TLS的环境中,禁用它们非常重要。
(迁移步骤1)TLS版本确认与设置更改
首先,请确认组织内使用的Windows版本以及TLS的设置情况。
如果Windows版本不支持TLS 1.2,请考虑使用更新的Windows版本。如果需要启用TLS 1.2,请考虑进行设置启用。
同时,建议逐步禁用TLS 1.0/TLS 1.1。
TLS支持情况一览
| Windows OS | SSLv2 | SSLv3 | TLS 1.0 | TLS 1.1 | TLS 1.2 |
|---|---|---|---|---|---|
| Windows Server 2008 | 〇 | 〇 | 〇 | △ | △ |
| Windows 7/Windows Server 2008 R2 | 〇 | 〇 | 〇 | △ | △ |
| Windows Server 2012 | △ | 〇 | 〇 | 〇 | 〇 |
| Windows 8.1/Windows Server 2012 R2 | △ | 〇 | 〇 | 〇 | 〇 |
| Windows 10 | △ | 〇 | 〇 | 〇 | 〇 |
| Windows Server 2016 | × | △ | 〇 | 〇 | 〇 |
- 〇 启用:默认可用
- △ 需要设置:需要启用才能使用。Windows Server 2008的TLS 1.2支持更新计划于2017年夏季提供。最新信息请参考“TLS 1.2 support at Microsoft”。
[2017/7/21 更新] 发布了TLS 1.2 for Windows Server 2008 (KB4019276)。可从Microsoft Catalog获取。2017/8/15开始通过Windows Update/WSUS/catalog作为可选更新分发。此外,计划于2017/9/12作为推荐更新开始分发。最新信息请参考“TLS 1.2 Support added to Windows Server 2008”。阅读更多:https://blogs.microsoft.com/microsoftsecure/2017/07/20/tls-1-2-support-added-to-windows-server-2008/#MgmQml54wIq9kmed.99 - × 不支持:不可用(未实现)
TLS设置更改
TLS版本的设置更改,请参考以下支持技术文章:
如何限制特定加密算法和Schannel.dll协议的使用 https://support.microsoft.com/en-us/kb/245030
此外,关于Windows及其他软件的设置,加密技术评估项目CRYPTREC制作的《SSL/TLS加密设置指南~为了安全网站(加密设置对策篇)~》中提供了设置指南,请务必参考。
(迁移步骤2)确认并修正应用程序代码中的TLS使用情况
确认是否在软件或应用程序中硬编码使用了特定TLS版本,如果是,请考虑修正。建议不要硬编码使用特定版本,而是修正为使用Windows默认设置。此外,如果需要支持TLS 1.2,请考虑修改代码。
对于使用Windows提供的加密库的软件或应用程序,可以通过以下步骤确认:
- 确认使用AcquireCredentialsHandle()的实例。可能存在TLS使用的硬编码。
- 确认SecPkgContext_SupportedProtocols和SecPkgContext_ConnectionInfo结构。可能存在TLS使用的硬编码。
- 在本地代码中,将grbitEnabledProtocols设置为零。这样,操作系统将使用默认的TLS版本(使用可用的最新版本TLS)。
- 禁用FIPS模式。
- 修正在Windows Server 2012及更早版本中使用WinHTTP的应用程序并重新编译。为了支持TLS 1.2,需要使用WinHttpSetOption。
- 扫描代码和配置文件,确认并修正以下常见的TLS硬编码描述:
- SecurityProtocolType
- SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11
- WINHTTP_FLAG_SECURE_PROTOCOL_
- SP_PROT_
- NSStreamSocketSecurityLevel
- PROTOCOL_SSL or PROTOCOL_TLS
对于使用.NET的应用程序,确认SSLProtocols是否设置为Default。同时,推荐使用最新的.NET Framework版本重新编译。
(迁移步骤3)进行TLS 1.2连接测试
在启用TLS 1.2的状态下,确认各种连接是否有问题。
常见的连接错误原因包括不支持TLS 1.2的客户端、浏览器或应用程序之间的连接错误。例如,已经结束支持的Windows Vista及更早版本的Windows无法使用TLS 1.2。请推进向更新版本Windows的迁移。作为简单检查使用哪个TLS版本的方法,推荐使用Qualys SSL Labs进行确认。
对于使用基于证书的TLS相互认证的软件或应用程序,需要特别注意。可能存在基于TLS 1.0的实现,导致连接错误。如果使用通常的Windows证书存储以外的存储,可能需要在TLS 1.2中更新应用程序以确保证书正确使用。
请确认环境中使用的微软产品以外的软件、应用程序、服务和网络设备是否支持TLS 1.2。
(补充)在IIS中确认TLS连接情况
在Windows Server 2012R2和Windows Server 2016中,可以使用IIS日志确认客户端正在使用哪个TLS版本。
详情请参考New IIS functionality to help identify weak TLS usage。
尽早开始迁移计划!
停止使用旧算法并启用新算法需要仔细审查和验证组织环境,这是一个耗时的过程。但攻击者不会等待。几年前发生POODLE攻击时,需要禁用SSL 3.0,许多人匆忙应对。特别是TLS 1.0已经使用了很长时间,禁用后的影响确认预计需要时间。请务必尽早开始迁移计划。
更新历史
2017/7/21:随着TLS 1.2 for Windows Server 2008 (KB4019276)的发布,更新了信息。