zoukankan      html  css  js  c++  java
  • 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配置界面出现相关驱动,如下图所示:

  • 相关阅读:
    Struts系列教材 (四)- 基础
    Struts系列教材 (三)- 基础
    Struts系列教材 (一)- 基础
    Hibernate系列教材 (三十)- 注解
    网络之AFNetworking
    iOS网络学习之“远离NSURLConnection 走进NSURLSession”
    ios中常见数据存储方式以及SQLite常用的语句
    利用"仿射变换"制作“酷炫特效”
    图片滚动新闻和新闻的滚动菜单
    简易聊天窗口
  • 原文地址:https://www.cnblogs.com/jackkwok/p/14637477.html
Copyright © 2011-2022 走看看