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

Jetty 10添加HTTP/3支持时出现PEM工作目录未配置异常求助

关于Jetty HTTP/3配置中PEM工作目录的问题解答

1. 什么是PEM工作目录?

Jetty的HTTP/3基于QUIC协议实现,而QUIC依赖的底层库需要使用PEM格式的证书文件完成TLS握手流程。PEM工作目录就是Jetty专门用来存放这些PEM格式证书、私钥文件的目录——Jetty可以自动从你已配置的密钥库中导出所需的PEM文件到该目录,无需你手动转换格式。

2. 是否包含安全相关信息?

是的,该目录会存储PEM格式的SSL证书链、私钥等敏感安全信息,这些是TLS加密通信的核心凭证。必须确保该目录的文件系统权限严格限制,仅允许运行Jetty的进程用户拥有读写权限,防止敏感信息泄露。

3. 是否必须包含特定文件?

不需要你手动放置特定文件。只要你正确配置了密钥库(也就是你在HTTP/2中使用的那套),Jetty启动时会自动将密钥库中的证书、私钥导出为PEM格式文件并存放到该目录中。如果手动管理该目录,通常需要包含证书链文件(如fullchain.pem)和私钥文件(如privkey.pem),但自动导出模式下无需额外操作。

解决当前异常的配置方法

你需要在嵌入式Jetty的HTTP/3连接器配置中显式指定PEM工作目录,示例代码如下:

// 假设你已有的SSLContextFactory配置
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
sslContextFactory.setKeyStorePath("/path/to/your/keystore.jks");
sslContextFactory.setKeyStorePassword("your-keystore-password");
// ...其他SSL配置

// 创建HTTP/3连接器并设置PEM工作目录
HTTP3ServerConnector http3Connector = new HTTP3ServerConnector(server, sslContextFactory);
// 可以指定自定义目录,或使用临时目录
http3Connector.setPemWorkDirectory(new File("/opt/jetty/pem-workdir"));
// 设置HTTP/3监听端口,通常是443或其他HTTPS端口
http3Connector.setPort(443);

server.addConnector(http3Connector);

注意:指定的目录需要Jetty进程有读写权限,若使用临时目录,可通过Files.createTempDirectory("jetty-pem")动态创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:19:58