我们如何让 IIS 与禁用 TLS1.0 的 SQL Server 通信?

Out*_*ill 5 security sql-server sql-server-2014

背景

我们需要 PCI-DSS 合规性,因此必须禁用 TLS1.0。在我的测试环境中,我们有 SQL Server 2014 SP1 和 CU 1(根据这篇文章)和 IIS 8 都在同一个盒子上。我使用Nartac IIS Crypto 工具禁用 TLS1.0 并重新启动。那是我的麻烦开始的时候。

SQL 代理无法启动,SSMS 无法连接到服务器,网站停止工作。(幸运的是,我仍然使远程桌面连接到我的测试服务器。)

然后我读了微软的文章,它说基本上 SQL Server 只需要有 TLS1.0。

我可以解决这个问题吗?(也许我需要一个单独的盒子来测试 SQL Server?)

Out*_*ill 4

我已经解决了我的问题。不确定是否所有障碍都是 DBA 通常会遇到的事情,但由于人们通常有兴趣解决整个问题,而这似乎是其他人可能遇到的一系列问题(考虑到问题的各种来源),因此:

  1. 将 IIS 放在单独的盒子上。这允许 IIS 禁用 TLS1.0,而 SQL Server 启用它。

  2. 使用John Louros 的 PowerShell 脚本(不是 NARTAC 的 IISCrypto 工具)在 IIS 机器上禁用 TLS1.0 。

  3. 在这个阶段我开始得到System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms..NET 应用程序默认启用FIPS 合规性,因此其他人很可能会遇到这种情况。由于我不需要 FIPS 合规性,因此我尝试<enforceFIPSPolicy enabled="false"/>按照这篇文章添加到 web.config ,但这并没有解决问题。然后我按照这篇文章中接受的答案进行操作。后来我遇到了困难,并撤消了这两项更改,但 FIPS 错误没有再次出现。抱歉,这不太有启发性。

  4. 然后我得到了System.Security.Cryptography.CryptographicException,我通过按照此处的建议更改 web.config 来修复该问题。我将<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>(这是这篇旧的 Microsoft 知识库文章中建议的)替换为<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="HMACSHA256" decryption="AES" />.

然后——万岁!- 一切又恢复正常了。

编辑

我读了亚伦·伯特兰(Aaron Bertrand)的帖子,其中提到了这个答案。对于从那里来到这里的任何人,我应该指出,我的测试是在Microsoft 于 2016 年 1 月下旬宣布支持 TLS1.2之前进行的 。我将尝试重新测试我以前没有从该公告中获得的任何更新,并再次在同一个盒子上使用 IIS 和 SQL,并在此处发布我的发现。

(我对能够共置 IIS 和 SQL 并不是特别乐观,因为根据我所读到的内容,由于具有 SP1 CU1,我已经在 SQL Server 2014 中获得了 TLS1.1 和 TLS1.2 支持,因此这些最新更新是理论上不会添加任何新内容。另外,我有一个未经测试的预感,由于 IIS 和 SQL 位于不同的机器上,我可以拥有任何旧版本的 SQL Server,而不需要 TLS1.1 支持。如果有人有任何想法我很高兴听到他们的声音。)