我通过 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 时。
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 身份验证 + 加密连接连接的错误。
因此Sql server 2012及以上版本将支持使用TLSv1.2的windows身份验证,windows身份验证与加密连接无缝连接。 现在我正在使用
- Java 8
- SQL 服务器驱动程序 4.2
- Windows 10
- 连接字符串中没有额外的参数。
关于java - 如何在 Windows 身份验证和强制加密设置为 true 的情况下连接到 MSSQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237187/