在 Java 启动命令中添加参数,允许客户端接受 TLS 1.0

要通过 IIS Crypto 工具验证服务器启用的 TLS 协议版本(以 Windows 服务器为例),操作步骤如下:

1. 下载并安装 IIS Crypto

官网下载地址:IIS Crypto(免费工具,适用于所有 Windows 版本)。下载后双击安装,按提示完成安装(无需复杂配置)。

2. 运行 IIS Crypto 查看 TLS 协议状态

从开始菜单启动 IIS Crypto(建议以管理员身份运行)。在主界面的 Protocols(协议)选项卡中,会列出所有 TLS/SSL 协议(SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2、TLSv1.3 等)。查看 TLS 1.2 对应的复选框:
若已勾选,说明 TLS 1.2 已启用;若未勾选,需手动勾选(同时建议取消勾选 TLSv1.0、TLSv1.1 以提高安全性)。

3. 确认并应用配置(若需修改)

若 TLS 1.2 未启用,勾选 TLS 1.2 对应的复选框(客户端和服务器端都需勾选,即 
Client
 和 
Server
 列)。点击界面底部的 Apply 按钮,工具会提示 “需要重启服务器才能生效”,点击 Yes 确认。重启服务器后,再次打开 IIS Crypto,确认 TLS 1.2 已处于勾选状态(启用成功)。

4. 额外验证:通过 PowerShell 命令检查

若无法安装工具,可通过 PowerShell 命令验证 TLS 1.2 状态:

powershell



# 查看 TLS 1.2 服务器端配置
Get-ItemProperty "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server"
 
# 查看 TLS 1.2 客户端配置
Get-ItemProperty "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client"

若输出中 
Enabled
 为 
1
 且 
DisabledByDefault
 为 
0
,表示 TLS 1.2 已正确配置并启用。

通过以上方法,可直观确认服务器是否已启用 TLS 1.2 协议,确保其与客户端(Java 应用)支持的 TLS 版本兼容,解决数据库连接的 SSL 加密问题。

这个错误依然明确指向 TLS 协议版本不兼容问题:SQL Server 服务器仍在使用 TLS 1.0,而客户端(Java 应用)只接受 TLS 1.2/1.3,导致 SSL 连接失败。结合之前的排查,需聚焦以下未解决的核心问题

关键排查点(必须执行)

1. 确认 SQL Server 服务器的 TLS 1.2 配置是否真正生效

即使已通过注册表或 IIS Crypto 配置了 TLS 1.2,必须重启服务器(不是仅重启 SQL Server 服务),否则系统级的 TLS 配置不会加载。重启后,用 IIS Crypto 重新检查:
确保
Protocols
选项卡中TLS 1.2 的 Client 和 Server 复选框均已勾选,且 TLS 1.0/1.1 已取消勾选(若需禁用旧协议)。点击
Best Practices
按钮,工具会自动应用安全配置(包括启用 TLS 1.2),减少手动配置失误。

2. 客户端 Java 应用的 TLS 参数是否正确生效

若使用临时方案(允许 TLS 1.0),需通过调试日志验证参数
在启动命令中添加 SSL 调试参数,查看客户端实际支持的协议:

bash


java -Djdk.tls.client.protocols=TLSv1,TLSv1.2,TLSv1.3 -Djavax.net.debug=ssl:handshake -jar your-app.jar

日志中若出现
Supported versions: [TLSv1, TLSv1.2, TLSv1.3]
,说明参数生效;若仍只有
TLSv1.2, TLSv1.3
,则参数未被正确读取(如位置错误或被其他配置覆盖)。若使用 Java 8,检查
jre/lib/security/java.security
文件:
确保
jdk.tls.disabledAlgorithms
没有包含 TLSv1(若有则注释掉,重启应用)。

3. SQL Server 是否强制使用旧协议

打开 SQL Server 配置管理器,展开 “SQL Server 网络配置”→“XXX 的协议”→右键 “属性”→“标志” 选项卡:
确认 “强制加密”(Force Encryption)设置为 “否”(或已配置兼容 TLS 1.2 的证书)。 若 SQL Server 绑定了特定加密套件,需确保包含 TLS 1.2 支持的套件(如
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
)。

最终解决路径

服务器端必须完成:启用 TLS 1.2 + 重启服务器 → 用 IIS Crypto 验证生效。客户端必须完成:若服务器已启用 TLS 1.2,无需额外参数;若未启用,确保 Java 8 + 启动参数正确传递。排除中间件干扰:检查应用服务器(如 Tomcat)是否有独立的 TLS 配置,避免覆盖 JVM 参数。

只有当服务器实际使用 TLS 1.2 时,客户端才能建立连接。若持续报错,优先确认服务器 TLS 1.2 是否真的生效(重启是关键),而非仅依赖配置界面的显示。

在 Ubuntu 系统下,若要检查并修改
jre/lib/security/java.security
文件,确保
jdk.tls.disabledAlgorithms
中不包含 TLSv1,可按照以下步骤操作:

1. 定位 Java 安装目录

首先要确定 Java 8 的安装位置。在 Ubuntu 中,如果是通过
apt
安装的 OpenJDK 8,它的默认安装路径是
/usr/lib/jvm/java-8-openjdk-amd64
(具体可能因系统设置和安装方式略有不同)。你可以使用以下命令查找 Java 安装目录:

bash


update-alternatives --query java | grep "Value"

这条命令会显示当前默认 Java 的执行路径,从这个路径可以推断出 Java 的安装目录。例如,输出
Value: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
,那么 Java 安装目录就是
/usr/lib/jvm/java-8-openjdk-amd64

2. 编辑 java.security 文件

进入 Java 安装目录下的
jre/lib/security
目录,使用文本编辑器(如
nano

vim
)打开
java.security
文件:

bash


sudo nano /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security

或者使用
vim

bash


sudo vim /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security

3. 查找并修改 jdk.tls.disabledAlgorithms 配置


java.security
文件中,找到
jdk.tls.disabledAlgorithms
这一行。它的内容可能类似下面这样:

plaintext



jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, 
    DH keySize < 2048, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, 
    include jdk.certpath.disabledAlgorithms

如果其中包含
TLSv1
,就需要将其注释掉。使用
nano
编辑器时,将光标移动到
TLSv1
处,在其前面添加
#
进行注释;使用
vim
编辑器时,按下
i
进入插入模式,在
TLSv1
前面输入
#
,然后按下
Esc
,输入
:wq
保存并退出。

修改后的内容示例:

plaintext



jdk.tls.disabledAlgorithms=SSLv3, #TLSv1, TLSv1.1, RC4, DES, MD5withRSA, 
    DH keySize < 2048, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, 
    include jdk.certpath.disabledAlgorithms

4. 重启应用

完成文件修改后,保存并退出编辑器。然后重启你的 Java 应用程序,使修改后的配置生效。

通过以上步骤,就可以在 Ubuntu 系统的 Java 8 环境中,确保
jdk.tls.disabledAlgorithms
不包含 TLSv1,避免因 TLS 版本限制导致的连接问题。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
黑白的车厘子的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容