在尝试使用 Java 16 在 Eclipse 中执行 hello world MSSQL JDBC 连接时,出现以下错误:
"...server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]..."
经过搜索,我的 Java 客户端在尝试连接到我已弃用的 MSSQL 实例时似乎不允许使用此 TLS 版本。我该如何启用它?
以下是我添加 MSSQL JDBC 驱动程序的方法:
- 下载jar驱动:https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15
- 将 jar 添加到构建路径,在类路径下,java 版本的 jar(上面列出的版本)
TLS 1.0 和 1.1在最新的 Java 版本(OpenJDK 11.0.11 及以上)中默认禁用。因为这些版本的 TLS 随着时间的推移而被削弱,并且缺乏对更强大、更现代算法的支持。
解决方案:
按照 Microsoft 知识库文章修补您的 MSSQL 服务器并在 MSSQL 服务器上启用 TLS1.2:https://support.microsoft.com/en-us/topic/kb3135244-tls-1-2-support-for-microsoft-sql-server-e4472ef8-90a9-13c1-e4d8-44aad198cdbe
替代解决方案:(容易存在安全风险)
- 通过修改已安装 JDK 的现有 java.security 文件来启用它们,如 Kevin 的回答中所述。
- 或者通过覆盖您的特定应用程序的 java.security ,如下所示。(首选)
- 创建一个名为enableLegacyTLS.security 的文件。
- 在该文件中,为 jdk.tls.disabledAlgorithms 添加一个条目,其内容与 java.security 文件中的 jdk.tls.disabledAlgorithms 属性相同。
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,...
注意:最后一点,当您使用双等号 (==) 时,您告诉 JVM 忽略默认的 java.security 文件并仅加载此文件。但如果使用单个等号 (=),它会加载您的副本并将其叠加在默认的 java.security 文件上
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)