java - 如何在 Windows 身份验证和强制加密设置为 true 的情况下连接到 MSSQL Server

标签 java sql sql-server jdbc

我通过 Java 程序连接到 Sql Server 2008 和 2008+

  • Java 8
  • SQL jdbc 微软驱动程序 4.1
  • 连接字符串:DriverManager.getConnection("jdbc:sqlserver://<Ip>;instance=MSSQLSERVER;domain=<domain>;IntegratedSecurity=true;ssl=request;", "administrator", "password");

我能够成功连接。 但是,当我通过 sql server 配置管理器在 sql server 中启用 Force encryption to true 时。

enter image description here 我开始收到以下错误。

com.microsoft.sqlserver.jdbc.SQLServerException: An existing connection was forcibly closed by the remote host ClientConnectionId:xxxx

仅供引用: 我已经尝试在连接字符串中添加以下参数。

  • ssl=请求
  • ssl=要求
  • 加密=真
  • trustServerCertificate=true
  • 我还尝试将驱动程序升级到 4.2 和 mssql 驱动程序 7.0
  • 也尝试了 jtds 驱动程序
  • 需要注意的一点:我可以通过 ssms 连接到实例

编辑 1

- 另一个要点 - 它仅在 Windows 身份验证时发生(通过连接字符串中的 IntegratedSecurity=true; 启用)。 所以这种情况只有在 Force encryption 设置为 true 并且我们尝试以 Windows 身份验证模式连接时才会发生。

最佳答案

@Vivien @MarkRotteveel 感谢您的回答,为我指明了方向。

事实证明,版本低于 11.0 的 sql server 有问题,并且作为 11.0 版本的 sql server 的一部分进行了各种改进,纠正了 windows 身份验证 + 加密连接连接的错误。

enter image description here

因此Sql server 2012及以上版本将支持使用TLSv1.2的windows身份验证,windows身份验证与加密连接无缝连接。 现在我正在使用

  • Java 8
  • SQL 服务器驱动程序 4.2
  • Windows 10
  • 连接字符串中没有额外的参数。

仅供引用:在 Microsoft 网站上找到。 enter image description here

关于java - 如何在 Windows 身份验证和强制加密设置为 true 的情况下连接到 MSSQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237187/

相关文章:

java - 告诉 java 接受自签名证书(在某种程度上是重复的问题)

php - 查询在本地主机上工作但不在实时服务器上工作

mysql - SQL 查询以从 wp_usermeta 中检索结合两个元键和值的用户

sql - 简单的动态 SQL 查询语法

java - 在 Android 中创建秒表计时器

java - 在属性文件中转义 json 字符串

sql - Oracle 在系统级触发器上反射元组以动态替换感兴趣的字符

sql-server - SQL考试70-451比70-433简单吗?或者反之亦然?

sql - SSIS 在更新期间挂起,有 300 万行

java - 在 Java 中运行 Javascript 表单请求