使用ODBC数据源和TLS激活创建与SQL Server 2014的连接的问题

时间:2016-01-27 11:08:35

标签: sql-server ssl odbc

我正在尝试为我的应用程序创建/修改系统数据源,该数据源需要通过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配置管理器"
  • 配置证书
  • 我们可以使用Management Studio或SQL命令行实用程序
  • 成功建立与数据库的连接
  • 我们在通过Microsoft Schannel完成版本TLS 1.1之前禁用了所有SSL / TLS使用。这要求我们将SQL Express 2014 SP1更新为最新的累积更新(CU#3)
  • 我们尝试配置的ODBC数据源(通过ODBC数据源管理员)是一个"系统DSN"并使用" SQL服务器"驱动程序和目标服务器名称与在管理工作室中工作的服务器名称完全相同(其服务器名称对应于证书CN值中反映的计算机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 Client版本(我系统上的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!

1 个答案:

答案 0 :(得分:7)

所以,我终于在努力了一点之后才开始工作了。

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

我确实已下载并安装它,但它没有解决我的问题:只要我停用TLS 1.0及以下版本,ODBC就无法正常工作。

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

我为解决我的问题所做的是遵循malthus对另一个相关堆栈溢出问题的回答 https://dba.stackexchange.com/questions/93127/sql-server-service-won-t-start-after-disabling-tls-1-0-and-ssl-3-0(来自顶部的第3个回答)。

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

现在,我让IIS在我自己的服务和客户端工作。

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

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

我希望这会有所帮助!

  

编辑2016年2月25日

     

它看起来像最新的累积更新(CU5可用于   https://support.microsoft.com/en-us/kb/3130926)消除了对此的需求   激活系统密码术的FIPS选项。

     

我发现了这一点,因为我不得不停用FIPS以启用另一个必需的   功能仍然依赖于TLS 1.2连接。确实,它   似乎激活系统密码术的FIPS选项会阻止   .NET Framework成功地使用了一些系统算法(例如   SHA256Managed)。

     

此外,根据网上看到的一些讨论(即   http://blogs.technet.com/b/secguide/archive/2014/04/07/why-we-re-not-recommending-fips-mode-anymore.aspx)   不建议激活FIPS(严格遵守   一些政府建议)因为它打破了申请   依赖于非FIPS验证的加密实现   算法,但是在Microsoft系统库中提供。