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
相关产品推荐
相关产品推荐

