如何在配置TLS 1.3的Jetty服务中启用certificate_authorities扩展
问题根因
Jetty 11 及 JDK 11.0.9+ 版本默认关闭了 TLS 1.3 握手阶段受信任 CA 列表的发送逻辑,目的是压缩握手包体积,需要手动修改配置开启该能力。
操作步骤
1. 配置JVM参数开启TLS 1.3 CA列表发送能力
JDK 11 默认禁用了 TLS 1.3 下服务端发送 CA 列表的特性,两种配置方式二选一即可:
- 全局配置:修改JRE安装目录下的
conf/security/java.security文件,将jdk.tls.server.certificateAuthorities配置项的值改为true - 服务单独配置:启动Jetty时添加JVM启动参数
-Djdk.tls.server.certificateAuthorities=true,优先级高于全局配置
2. 配置Jetty开启CA列表发送
独立部署Jetty场景
修改Jetty配置目录下的start.d/ssl.ini或start.ini文件,添加以下两行配置:
jetty.sslContext.trustCertificatesRequired=true jetty.sslContext.sendCertificateAuthorities=true
如果使用XML格式配置SslContextFactory,在对应的配置节点下新增属性:
<Set name="sendCertificateAuthorities">true</Set>
嵌入式Jetty场景
初始化SslContextFactory.Server实例时主动调用对应方法开启配置,示例代码:
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); // 原有keystore、truststore、客户端认证配置保持不变 sslContextFactory.setNeedClientAuth(true); // 新增开启发送受信任CA列表的配置 sslContextFactory.setSendCertificateAuthorities(true);
3. 验证配置生效
重启Jetty服务后,执行以下openssl命令验证:openssl s_client -connect 你的服务域名:端口 -tls1_3
查看输出内容中的Acceptable client certificate CA names段落,如果能正常展示你配置的信任CA的DN信息,说明配置已生效。
注意事项
- 若信任库中CA条目较多,会导致TLS握手包体积变大,可能触发MTU分片,需结合实际业务场景权衡
- 需确保当前使用的Jetty版本不低于11.0.1,否则TLS 1.3下该配置不生效
内容的提问来源于stack exchange,提问作者mlapeyre
相关产品推荐
相关产品推荐

