You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

javax.net.ssl.SSLException: protocol_version报错怎么排查与配置?

问题解答

1. https.protocols 配置归属

该系统属性属于客户端侧配置,仅作用于Java进程作为客户端发起SSL/TLS连接时的协商逻辑:你提到的System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");是指定本地Java客户端向外发起连接时,允许使用的TLS协议版本白名单,避免客户端默认支持的协议版本不在服务端允许范围内,导致协商失败抛出protocol_version错误。
如果需要调整服务端支持的TLS协议版本,无需使用该属性,不同服务端容器(Tomcat、Netty、Jetty等)都有独立的SSL配置项指定允许的协议版本。

2. 两端TLS协议版本查询方法

2.1 Java客户端查询

  • 代码层面查询:可以直接打印当前运行环境支持的协议列表:
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import java.util.Arrays;

public class TlsVersionCheck {
    public static void main(String[] args) throws Exception {
        SSLContext context = SSLContext.getDefault();
        SSLParameters params = context.getDefaultSSLParameters();
        // 输出当前客户端默认支持的所有TLS协议版本
        System.out.println("Supported TLS protocols: " + Arrays.toString(params.getProtocols()));
    }
}
  • 运行中进程查询:通过Wireshark抓包,查看客户端发起的Client Hello报文中的Supported Versions字段,就是客户端实际对外宣告支持的所有协议版本;协商成功后的Server Hello报文中的版本字段就是本次连接实际使用的协议版本。

2.2 服务端查询

  • 命令行探测:使用openssl工具即可批量探测服务端支持的所有TLS版本,示例命令:
# 替换为实际的服务端域名和端口
# 探测TLSv1.2支持情况
openssl s_client -connect example.com:443 -tls1_2
# 探测TLSv1.1支持情况
openssl s_client -connect example.com:443 -tls1_1
# 探测TLSv1支持情况
openssl s_client -connect example.com:443 -tls1

如果命令执行后成功建立SSL连接,说明服务端支持对应版本的TLS协议。

  • 配置查询:直接查看服务端的SSL配置文件即可确认允许的协议列表,比如Tomcat在server.xml的Connector节点配置sslEnabledProtocols属性,Spring Boot服务可在配置文件中查看server.ssl.enabled-protocols配置项。

内容的提问来源于stack exchange,提问作者Stefano Maglione

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:36:04