DBNETLIB SSL 安全設定錯誤

2020-08-06

時間強迫著每個系統前進,趕不上安全性要求的系統除了改寫就是凋零 😢

logo

說明

因為資安需求,必須要關閉 TLS 1.2 以下的安全連線方式,一旦關閉之後原本運作正常的 ASP 開始報錯,根據錯誤訊息索驥發現是與資料庫連線方式的問題,調整之後一切恢復正常。

錯誤訊息

Microsoft OLE DB Provider for SQL Server error '80004005' 
[DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error.
[Microsoft][ODBC SQL Server Driver][DBNETLIB] 用戶端不支援加密
[Microsoft][ODBC SQL Server Driver][DBNETLIB] SSL Security error
[Microsoft][ODBC SQL Server Driver][DBNETLIB] SSL 安全設定錯誤

ODBC Family Driver 比較

SQL Server ODBC

Microsoft Data Access Components (MDAC) 提供的 ODBC 連線驅動程式,已經停止維護。

Provider Name 使用 {SQL Server}

SQL Server Native Client (SNAC)

自 SQL Server 2005 (9.x) 至 SQL Server 2012 (11.x) 期間提供服務,包含 ODBC provider interface (SQLNCLI)。

Provider Name 使用 {SQL Server}

Microsoft ODBC Driver for SQL Server

2012 年起的主要 Microsoft Solution ODBC 連線 Driver。

Provider Name 使用 {ODBC Driver 17 for SQL Server}

OLE DB Family Driver 比較

Microsoft OLE DB Provider for SQL Server (SQLOLEDB)

Microsoft Data Access Components (MDAC) 提供的 OLE DB 連線驅動程式,已經停止維護。

Provider Name 使用 SQLOLEDB

SQL Server Native Client (SNAC)

自 SQL Server 2005 (9.x) 至 SQL Server 2012 (11.x) 期間提供服務,包含 OLE DB provider interface (SQLNCLI)。

Provider Name 使用 SQLNCLI

Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)

2018 年起發行的版本,是選擇 OLE DB 連線方式的優先搭配驅動程式。

Provider Name 使用 MSOLEDBSQL

ODBC 連線處理方式

如果是原本使用 ODBC 的 ASP.NET Code,按照以下步驟調整:

  1. 安裝新版 Microsoft ODBC Driver for SQL Server
  2. 重新啟動網頁伺服器
  3. 調整程式連線字串,Provider 從 SQL Server 調整為 ODBC Driver 17 for SQL Server

Microsoft ODBC Driver for SQL Server 歷史版本

// Before
driver="{SQL Server};server=_;uid=_;pwd=_;database=_;"
// After
driver="{ODBC Driver 17 for SQL Server};server=_;uid=_;pwd=_;database=_;"

DSN 格式調整

// Before
Connection.Open "DSN=Web SQL; UID=_; PWD=_"
// After
Connection.Open "DRIVER={ODBC Driver 17 for SQL Server};SERVER=_;DATABASE=_; UID=_; PWD=_"
Conn.Open "DRIVER={ODBC Driver 17 for SQL Server};SERVER=_;DATABASE=_; UID=_; PWD=_"

OLE DB 連線處理方式

如果是使用 OLE DB 的 ASP / VB Code,按照以下步驟調整:

  1. 安裝新版 Microsoft OLE DB Driver for SQL Server
  2. 重新啟動網頁伺服器
  3. 調整程式連線字串,Provider 從 SQLOLEDBSQLNCLI 調整為 MSOLEDBSQL

Microsoft OLE DB Driver for SQL Server 歷史版本

// Before
ConnString = "Provider=SQLOLEDB; Data Source=_; Initial Catalog=_; User ID=_; Password=_"
ConnString = "Provider=SQLNCLI; Data Source=_; Initial Catalog=_; User ID=_; Password=_"
// After
ConnString = "Provider=MSOLEDBSQL; Data Source=_; Initial Catalog=_; User ID=_; Password=_"
//Before
db.fun
Params = "Provider=SQLOLEDB.1" 
//After
Params = "Provider=MSOLEDBSQL"

參考資料

Windows 停用 TLS 1.0 之配套作業整理

ODBC 與 OLEDB 之 SQL Server TLS 1.2 支援問題

將應用程式從 MDAC 更新為適用於 SQL Server 的 OLE DB 驅動程式

.NET Framework 的傳輸層安全性 (TLS) 最佳做法