Sql-Server

禁用 TLS 1.0 和 SSL 3.0 後 SQL 伺服器服務不會啟動

  • January 30, 2016

出於安全原因,我們在 Windows 上禁用了 TLS 1.0 和舊協議,並在以下系統資料庫​​路徑下僅啟用了 TLS 1.1 和 TLS 1.2: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 之後,SQL 服務獲勝’不要從以下錯誤開始:

2015-02-13 17:35:10.12 spid13s     The server could not load the certificate it needs to initiate an SSL connection. It returned the following error: 0x80090331. Check certificates to make sure they are valid.
2015-02-13 17:35:10.12 spid13s     Error: 26014, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     Unable to load user-specified certificate [Cert Hash(sha1) "9B49E2FB65EE880F7C8818A90187F572566C9213"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in Books Online.
2015-02-13 17:35:10.12 spid13s     Error: 17182, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     TDSSNIClient initialization failed with error 0x80092004, status code 0x80. Reason: Unable to initialize SSL support. Cannot find object or property. 
2015-02-13 17:35:10.12 spid13s     Error: 17182, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     TDSSNIClient initialization failed with error 0x80092004, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. Cannot find object or property. 
2015-02-13 17:35:10.12 spid13s     Error: 17826, Severity: 18, State: 3.
2015-02-13 17:35:10.12 spid13s     Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log.
2015-02-13 17:35:10.12 spid13s     Error: 17120, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL Server error log and the Windows event logs for information about possible related problems.

在事件管理器中,我們可以看到以下流程(增加了 Schannel 日誌記錄):

Info – Schannel – Creating an SSL client credential.
Info – Schannel – Creating an SSL server credential.
Error - Schannel - A fatal error occurred while creating an SSL client credential. The internal error state is 10013.

Schannel 錯誤詳解:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
   <Provider Name="Schannel" Guid="{1F678132-5938-4686-9FDC-C8FF68F15C85}" /> 
   <EventID>36871</EventID> 
   <Version>0</Version> 
   <Level>2</Level> 
   <Task>0</Task> 
   <Opcode>0</Opcode> 
   <Keywords>0x8000000000000000</Keywords> 
   <TimeCreated SystemTime="2015-02-16T15:22:16.166776400Z" /> 
   <EventRecordID>5943102</EventRecordID> 
   <Correlation /> 
   <Execution ProcessID="712" ThreadID="772" /> 
   <Channel>System</Channel> 
   <Computer>(deleted)</Computer> 
   <Security UserID="S-1-5-18" /> 
 </System>
 <EventData>
   <Data Name="Type">server</Data> 
   <Data Name="ErrorState">10013</Data> 
 </EventData>
</Event>

使用 WireShark,我們看不到任何 Client 或 Server Hello 消息。似乎錯誤發生在 TLS 協商之前 - 可能在解析伺服器證書期間。

使用 ProccessMonitor,我們看到 sqlserver.exe 服務從系統資料庫讀取證書,然後讀取 CRLs (none)、CTLs (none),然後跟隨第一條錯誤日誌消息。以下是第一個日誌錯誤之前 ProcMon 的最後幾條日誌:

12:22:09.8165314 PM sqlservr.exe    23256   RegCloseKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates  SUCCESS 
12:22:09.8165667 PM sqlservr.exe    23256   RegQueryKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\CRLs  SUCCESS Query: Cached, SubKeys: 0, Values: 0
12:22:09.8166280 PM sqlservr.exe    23256   RegQueryKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\CTLs  SUCCESS Query: Cached, SubKeys: 0, Values: 0
12:31:01.0048783 PM sqlservr.exe    9928    RegCloseKey HKLM\SOFTWARE\Microsoft\SystemCertificates\MY   SUCCESS 
12:22:09.8177144 PM sqlservr.exe    23256   WriteFile   C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2014\MSSQL\Log\ERRORLOG  SUCCESS Offset: 7,530, Length: 422

我們還嘗試使用 Verisign 的證書設置 SQL 伺服器(試用 30 天)。我們已按照此處所述設置所有設置

我們也按照此處所示的答案進行了操作(通過參考從此處獲得)。

不幸的是,沒有運氣。還是同樣的錯誤。

我們還嘗試在 SQL 配置管理器中禁用“強制加密”並從中刪除證書,但 SQL 伺服器仍然嘗試創建自簽名證書並失敗並出現相同的錯誤程式碼 0x80090331。

我知道這裡發布了一個類似的問題,但它在不禁用 TLS 1.0 的情況下是自我接受的:

還有一點需要注意的是,使用相同的設置和相同的證書,當啟用 TLS 1.0 時,一切正常。當 TLS 1.0 被禁用時,它會失敗。因此,似乎 TLS 1.1+ 不喜歡我們證書中的某些內容,或者 SQL Server 不喜歡 TLS 1.1+。

我們不允許啟用 TLS 1.0。任何幫助將非常感激。

與其他答案一樣:您需要一個最新的 CU 用於 TLS1.2。請參閱https://support.microsoft.com/en-us/kb/3052404

  • SQL Server 2014 的累積更新 8
  • SQL Server 2014 SP1 的累積更新 1
  • SQL Server 2012 SP2 的累積更新 6
  • SQL Server 2014 的累積更新 7

僅啟用 TLS 1.2 後,您可能會遇到兩個錯誤:

  1. SQL Server 2014 代理將無法啟動。解決方案:從 2012 CU 之一安裝 SQL Server 2012 SNAC…
  2. SQL Server Management Studio 無法連接。解決方案:安裝.net Framework v4.6。

此外,您必須更新所有連接到 SQL Server 的客戶端上的 SNAC/OBDC 驅動程序。

SQL Server 僅支持 SSL 3.0 和 TLS 1.0,您必須至少啟用其中之一,否則 SQL Server 將無法啟動。SQL Server 不支持 TLS 1.1、1.2 等,它專門使用 TLS 1.0。

您在此處的選擇是啟用 SSL 3.0 和/或 TLS 1.0,恐怕沒有其他辦法了。

乾杯墊

引用自:https://dba.stackexchange.com/questions/93127