DBNETLIB SSL 安全設定錯誤
2020-08-06
時間強迫著每個系統前進,趕不上安全性要求的系統除了改寫就是凋零 😢
說明
因為資安需求,必須要關閉 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,按照以下步驟調整:
- 安裝新版 Microsoft ODBC Driver for SQL Server
- 重新啟動網頁伺服器
- 調整程式連線字串,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,按照以下步驟調整:
- 安裝新版 Microsoft OLE DB Driver for SQL Server
- 重新啟動網頁伺服器
- 調整程式連線字串,Provider 從
SQLOLEDB
或SQLNCLI
調整為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"
參考資料
ODBC 與 OLEDB 之 SQL Server TLS 1.2 支援問題