我有一个带有嵌入式 Jetty 10 的有效 HTTP/2 配置。现在我想添加 HTTP/3 支持。我遵循 Jetty HTTP/3 文档。我收到以下异常:
java.lang.IllegalStateException: No PEM work directory configured
at org.eclipse.jetty.quic.server.QuicServerConnector.findPemWorkDirectory(QuicServerConnector.java:192)
at org.eclipse.jetty.quic.server.QuicServerConnector.doStart(QuicServerConnector.java:171)
at org.eclipse.jetty.http3.server.HTTP3ServerConnector.doStart(HTTP3ServerConnector.java:61)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.server.Server.doStart(Server.java:428)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
什么是 PEM 工作目录?它包含任何安全相关信息吗?该目录必须包含一些文件吗?
SSL 证书已加载到密钥库中并可与 HTTP/2 和旧版 HTTPS 配合使用。
Jetty 的实现与许多其他实现一样,使用 quiche 库作为 QUIC(HTTP/3 基础协议)的底层实现。
Quiche(用 Rust 编写)不使用 Java KeyStore,因此您必须以 PEM 文件提供公钥和私钥。
Jetty 会负责将您的 KeyStore 转换为 PEM 文件,但它需要一个目录来保存 PEM 文件。 由于 PEM 文件之一是私钥,因此必须使用文件系统权限充分保护 PEM 目录,这就是 Jetty 无法使用默认 PEM 目录的原因(例如,
/tmp/
将是一个糟糕的选择,因为任何人都会有访问您的 PEM 文件)。
您只需指定一个目录来存储您的PEM文件(确保其文件权限足够),Jetty将完成剩下的工作。