当前位置: 首页 > 知识库问答 >
问题:

在ODBC数据源和TLS激活的情况下创建与SQL server 2014的连接的问题

沃侯林
2023-03-14

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

以下是一些详细信息:

  • 我们使用最新的累积更新(CU#3)运行Microsoft SQL Server express 2014 SP1(这是必要的,以便我们可以停用SSL 3.0和TLS 1.0,并仅使用TLS 1.1和TLS 1.2运行)

我们在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本机客户端版本(在我的系统上为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个答案

郭盛
2023-03-14

所以,经过一点努力,我终于让它工作了。

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

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

奇怪的是,虽然CU3和安装。NET 4.6允许我成功登录Management Studio,当我尝试执行xp\u 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软件的员工、经理或股东。

我希望这会有所帮助!

它看起来像是最新的累积更新(CU5可在https://support.microsoft.com/en-us/kb/3130926)无需激活系统加密的FIPS选项。

我发现了这一点,因为我必须停用FIP以启用另一个所需的功能性,同时仍然依赖TLS 1.2连接。实际上,似乎激活系统加密的FIPS选项会阻止。NET框架成功地利用了一些系统算法(如SHA256Managed)。

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

 类似资料:
  • 我尝试为我的数据创建带有“转换”的插件到kafka-connect,并将其与不同的接收器连接器一起使用。当我安装插件时,kafka-connect看不到我的类。 我使用kafka connect maven插件创建了我的捆绑包zip。使用confluent hub(来自本地文件)的安装已成功。 所有文件都已解压,我的工作者属性已更新插件。路径。我在分布式模式下运行connect,并尝试从包中创建带

  • null 我看到过其他答案,提到了一个名为UCANAccess的Access数据库的JDBC驱动程序。如何设置Java项目以使用这种方法? (建议从Java使用Access数据库的更好方法的答案也是最受欢迎的。)

  • 我们想要自己的db连接配置而不是使用JNDI,但同时,我们也想使用DataSource而不是使用Drive verManager,怎么做?

  • 问题内容: 我想从我的Java项目中操作Microsoft Access数据库(.accdb或.mdb文件)。我不想使用Microsoft的JDBC-ODBC Bridge和Access ODBC驱动程序,因为: JDBC-ODBC Bridge已从Java SE 8中删除,并且不受支持(参考:here), 当文本包含代码点在U + 00FF以上的Unicode字符时,JDBC-ODBC Brid

  • 我有以下证书层次结构: 根-- 整个链都明确定义了serverAuth和clientAuth作为扩展密钥用法。 在我的go代码中,我创建了一个tls。像这样配置对象: certFile是证书链文件,keyFile是私钥文件。caCertFile是信任库,仅由根证书组成 所以基本上,这是我期望在我的tls里面有什么。配置来自此函数的对象: RootCAs:仅来自caCertFile的根证书Clien

  • 这两个dataframe没有任何公共列。两个数据流中的行数和列数也不同。我尝试插入一个新的虚拟列,以增加row_index值,如下val dfr=df1.withcolumn(“row_index”,monotonically_increasing_id())所示。 但由于我使用的是Spark2,因此不支持monotonically_increasing_id方法。有没有办法把两个datafram