我正在尝试为需要通过ODBC数据源连接到我们的Microsoft SQL Express 2014数据库的应用程序创建/修改系统数据源。
在启用SSL加密流程之前,该连接曾经可以正常工作,但是,
现在我们有了一个加密的链接,该连接将不再起作用。

以下是一些详细信息:

  • 我们使用最新的累积更新(CU#3)运行Microsoft SQL Server Express 2014 SP1(这是必需的,以便我们可以停用SSL 3.0和TLS 1.0并仅在TLS 1.1和TLS 1.2下运行)
  • 数据库实例是一个命名实例,配置为使用TCP/IP连接和固定端口运行。
  • 我们启用了“强制加密”选项,并通过“Sql Server Configuration Manager”配置了证书
  • 我们可以使用Management Studio或SQL命令行实用程序
  • 成功建立与数据库的连接。
  • 我们通过Microsoft Schannel禁用了版本TLS 1.1之前的SSL/TLS的所有使用。这要求我们将SQL Express 2014 SP1更新到最新的累积更新(CU#3)
  • 我们尝试配置的ODBC数据源(通过ODBC数据源Administrator)是“系统DSN”,并使用“SQL服务器”驱动程序,并且目标服务器名称与在Management Studio中使用的服务器名称完全相同(并且其服务器名称对应到在证书CN值中反射(reflect)的机器FQDN)
  • 为SQL Server ODBC驱动程序指示的版本是“Microsoft SQL Server ODBC驱动程序版本06.03.9600”
  • 我正在直接通过ODBC数据源管理员工具测试连接。
  • 我运行的第一个测试在与托管数据库服务器的计算机完全相同的计算机上运行。

  • 我们在Microsoft SQL Server登录名中收到两个连续的错误消息:
    Connection failed:
    SQLState : '01000'
    SQL Server Error: 771
    [Microsoft][ODBC SQL Server Driver][TCP/IP  Sockets]ConnectionOpen(SECDoClientHandshake()).
    Connection failed:
    SQLState : '08001'
    SQL Server Error: 18
    [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]SSL Security error.
    

    我浏览了所有可以找到但找不到解决方案的文献。

    编辑27/01/2016 16:30

    按照erg的建议,我尝试使用最新的MS SQL Server native 客户端版本(我的系统上为11.00.2100),但仍然无法解决问题。我仍然遇到另一个问题(无论我是否在客户端强制强加密都会导致相同的错误):
    Running connectivity tests...
    
    Attempting connection
    [Microsoft][SQL Server Native Client 11.0]TCP Provider: An existing connection was forcibly closed by the remote host.
    
    [Microsoft][SQL Server Native Client 11.0]Client unable to establish connection
    
    TESTS FAILED!
    

    最佳答案

    因此,经过更多努力之后,我终于使它正常工作。

    首先,似乎还有另一个可用于SQL Server Express 2014 SP1的CU(CU4)。

    我确实下载并安装了它,但是它不能解决我的问题:停用TLS 1.0和更低版本的ODBC后,它就无法工作。

    奇怪的是,虽然CU3和.NET 4.6的安装允许我在尝试执行时成功登录Management Studio。xp_readerrorlog查询,它实际上失败了。

    我要做的是解决马尔萨斯对另一个相关堆栈溢出问题的回答
    https://dba.stackexchange.com/questions/93127/sql-server-service-won-t-start-after-disabling-tls-1-0-and-ssl-3-0(自上而下的第三个答案)。

    因此,我在计算机上激活了本地安全策略,并设法使指向我的SQL数据库的链接正常工作。

    现在,我让IIS与我自己的服务一起工作,而客户端也在工作。

    顺便说一句,如果有人需要一种更加用户友好的方式来激活Windows上的SSL/TLS版本和加密算法,我偶然发现了一个不错的GUI应用程序,它不需要使用regedit:

    https://www.nartac.com/Products/IISCrypto。它是免费的,而且我不是Nartac Software的员工,经理或股东。

    我希望这个能帮上忙!

    09-05 13:35
    查看更多