TLS1.0禁用問題


1,問題的提出

某VB編寫的應用程序,配合SQLServer2017數據庫使用,在某客戶現場運行正常。

后來基於安全審查的理由,需要禁用TLS1.0協議。但是,在禁用TLS1.0協議后,出現程序無法連接數據庫的故障。

而同時,數據庫自帶的客戶端工具卻能正常連接數據庫實例。

 

 

  

2,問題復現

為解決上述問題,試圖在公司內復現問題。公司內采用的是SQLServer2008 R2數據庫。

采用IIScrypto工具軟件設置TLS協議。在僅啟用TLS1.2和ssl3.0之后,程序運行正常。客戶的問題未能重現。

 

3,技術研究

在網上根據錯誤信息搜索解決方案,發現一些有價值的信息。分別敘述如下:

3.1 技術文章1

https://blog.csdn.net/weixin_39907762/article/details/111090889?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-7.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-7.control

上文發生故障的環境與本文非常類似,也是與TLS1.0協議和 SQL Server 2017版本數據庫有關,非常具有借鑒意義。文章指出:

  • 原來的SQL Server Driver在新環境下不能連接到SQL Server 2017。
  • 通過查閱相關文檔和與客戶公司IT交流得知,在SQL Server 2016及以后,ODBC驅動需要由SQL Server改為ODBC Driver 17 for SQL Server,但是快速開發平台並不僅僅使用ODBC Driver,還需要 OLE DB Provider的支持。
  • ODBC Driver 17 for SQL Server僅提供ODBC驅動,不滿足快速開發平台的要求。

 

該文經過對各種驅動程序的篩選,最后選定SQL Server Native Client 11.0作為新環境的驅動程序,然后由平台的開發人員對平台中的相關代碼和界面進行調整,最終在新環境連接數據庫成功,可以正常運行。並指出設置的關鍵在於:

  • SQL Server Driver:SQL Server Native Client 11.0
  • OLE DB Provider:SQLNCLI11

 

3.2 技術文章2

https://cloud.tencent.com/developer/article/1593770

該文中描述的錯誤也是一直提示: Run-time error ‘-2147467259 (80004005)’: [DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error.

  • 搜索了很多資料,都是說要改注冊表的SSL1,SSL1.1, SSL1.2,但是並沒有什么卵用。最后經過無數次試驗,改一下鏈接字符串就OK了。
  • 老的鏈接字符串: ServerConnString = “Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PWD=xxxxxx;Initial Catalog=MyDB;Data Source=ServerName”
  • 試着改成了 ServerConnString = “Provider=SQLNCLI11;Persist Security Info=False;User ID=sa;PWD=xxxxxx;Initial =MyDB;Data Source=ServerName” 本地鏈接成功,
  • 然后就把新版本的excel發布出去了。結果用戶反饋,鏈接不上。 然后又試着改成下面的字符串 ServerConnString = “Driver={sql server};server=ServerName;uid=sa;PWD=xxxxxx; database=MyDB; AutoTranslate=False” 完美解決問題。

該文指出問題的關鍵點在於修改連接數據庫的字符串,並給出了2種連接方式。一種是采用Provider,另一種是采用Driver。

以上對於本人最終解決問題,提供了最直接的思路。

3.3 技術文章3

https://blog.csdn.net/xqhrs232/article/details/78274572

SQL Server客戶端工具到底使用的是哪個provider呢?

 

 

該文給出的以上表格非常具有借鑒意義。可以看出,SQLServer數據庫的ODBC驅動程序從sqlsvr32.dll,到sqlncli.dll,再到sqlncli10.dll,再到sqlncli11.dll。

因此明確,連接字符串的Provider參數應該采用sqlncli11。

 

3.4 技術文章4

 Microsoft has recently released SQL Server 2017 and ODBC Client 13.1.

https://www.dataaccess.com/news/microsoft-sql-server-2017-and-odbc-driver-13-1-support-1410

 

Microsoft® ODBC Driver 13.1 for SQL Server® - Windows, Linux, & macOS

https://www.microsoft.com/en-us/download/details.aspx?id=53339

 

 

從該文了解到微軟ODBC驅動實際上已經發展到了13.1版本。但對於2017數據庫,11版的驅動應該就足夠了。

 

4,問題的解決

 

最終,在以上文章的啟發下,采用了以下連接字符串連接數據庫,順利解決了禁用TLS1.0協議程序無法連接的問題。

Provider=SQLNCLI11;Persist Security Info=False;User ID=sa;PWD=xxxxxx;Initial Catalog=Carpos;Data Source=192.168.5.114

 

注意事項:運行應用程序的電腦上必須安裝SQL Server Native Client 11的驅動。檢查依據就是系統的ODBC配置界面出現相關驅動,如下圖所示:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM