SQL Server 2014 啟用 TLS 1.1 和 TLS 1.2
我有一個 Windows Server 2012 R2,它是一個帶有 SQL Server 2014 (Express) 的 DC,更新到帶有 CU10 12.2.5571.0(測試環境)的最新 SP2。我通過在路徑中設置系統資料庫項禁用了除TLS1.1和TLS1.2之外的所有協議:
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
.我最初只啟用了 TLS1.2,但我還需要 TLS1.1 以向後兼容在同一域的另一台機器上執行的 Java 應用程序。為了使用 TLS1.2,需要特定的 JDBC 驅動程序,並且必須為 JDBC url 提供一個屬性(請參閱此處的討論)。
同時我想讓應用程序與 TLS1.1 一起工作,所以我重新啟用了它。但是,應用程序無法連接到數據庫,SQL Server 似乎沒有使用 TLS1.1。為了測試連接,我嘗試了以下命令:
1)
openssl s_client -connect <Server IP>:1433 -ssl3
2)
openssl s_client -connect <Server IP>:1433 -tls1_1
3)
openssl s_client -connect <Server IP>:1433 -tls_1_2
測試 1) 按預期失敗(握手失敗),而測試 2) 需要一些時間(大約 30 秒或更長時間)才能產生成功的響應。測試 3) 按預期產生了成功的輸出。
我還嘗試在客戶端電腦上使用 Management Studio,並且只有在客戶端和伺服器上都啟用了 TLS1.2 時連接才有效。否則,如果僅啟用 TLS1.1,則會顯示以下錯誤:
與伺服器成功建立連接,但在登錄過程中出現錯誤。(提供者:SSL Provider,錯誤:0 - 客戶端和伺服器無法通信,因為它們沒有共同的算法。)
怎麼可能?
我是否需要在安全通道上強制執行某些操作?
為什麼 SQL Server 不再允許 TLS1.1 連接?
我驗證了為了使用協議 TLS1.1,必須設置以下鍵:
- SHA雜湊已啟用(啟用鍵設置為 1)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA
- 啟用TLS 1.0協議(客戶端和伺服器的Enabled鍵設置為 1,DisabledByDefault設置為 0)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server
注意:更改這些密鑰後,重新啟動機器,以便重置安全通道連接。
如果禁用 SHA 雜湊或 TLS 1.0 協議,則 TLS 1.1 協議會因未知原因停止工作。
協議與算法不同。
無論您如何配置 SQL Server,作業系統都必須允許協議並支持算法。
有關更多資訊,請閱讀: https ://blogs.msdn.microsoft.com/sql_protocols/2007/06/29/ssl-cipher-suites-used-with-sql-server/
確定客戶端和伺服器相互支持的最高級別協議。目前公認的協議從高到低依次為:TLS1.1、TLS1.0、SSL3.0、SSL2.0 客戶端將向伺服器提供其協商協議中的密碼套件列表 伺服器將選擇最強的密碼它能夠從客戶列表中支持的套件。
您可以在此處找到有關 SSL 主題的最佳實踐的更多資訊 https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
如果您不喜歡擺弄 Windows 的系統資料庫,您可以使用 Nartact 免費工具IIS Crypto來配置您的 Windows 伺服器。IIS 部分無關緊要。這個工具實際上配置了作業系統。