SQLServer 2008 Linked Server SQLServer 2012 遠端主機已強制關閉一個現存的連線

環境:

HOST 1: Windows 2008 SP2 + SQLServer 2008 SP4 (Client TLS1.0、TLS1.1、TLS1.2 開啟)

HOST 2: Windows 2012 + SQLServer 2012 SP4 (原Server 只開TLS1.2 後來測試改開 Server TLS1.0、TLS1.1、TLS1.2)

因應資安環境,HOST2 經由主機弱掃後,Windows 只開啟 TLS1.2,其餘均關掉,

原 HOST1 要使用 SQLServer 2008 Linked Server 連到 HOST2 都無法連線,

只出現 「遠端主機已強制關閉一個現存的連線」,直覺是與 TLS 1.2 有關係,

因此更新 HOST1 Windows 2008 SP2 支援 TLS1.2 的版本 (KB4019276),

更新 HOST1 SQLServer 2008 SP4 (KB4057114) GDR 版本,

測試後也是無法連線,

最後拿微軟出的網路封包 Microsoft Network Monitor 來檢查,

上圖可以發現 Client 端有發出 TLS1.2 協定的連接訊息,

但對方的主機卻無回應,正常的連接會如下圖,

與主機單位討論可能的問題點,說要不要試試hash舊值開啟,

原先 HOST2 主機設定值如下:

討論可能與封包解析加密方式有關,開啟後的設定值如下:

重新測試,OK了… (os:耗費將近1週的時間,只因為hash舊方法沒開啟…

不過因應舊hash的方法有資安問題,

未來還是會將 SQLServer 2008 升級 SQLServer 至 2017,

因此 SQLServer 2008 + Windows 2012 開啟 hash 舊值 的方法,

只能先渡過還沒升級前無法連線的困擾,

當升級完後,hash舊值的設定還是要關閉的。

 

參考:

Microsoft Network Monitor 3.4

TLS 握手优化详解

TLS 1.2 support for Microsoft SQL Server

[.NET]與伺服器的連接 已成功建立,但在登入前的信號交換時發生錯誤。(Provider: SSL 提供者, error: 0-用戶端與伺服器 無法溝通,因為他們沒有公用的演算法)

為 Windows Server 2008 SP2、Windows Embedded POSReady 2009 和 Windows Embedded Standard 2009 中的 TLS 1.1 及 TLS 1.2 新增支援的更新