我们有一个有效的Apache mod_ssl配置。我想为Undertow启用HTTPS支持,以便它侦听http和https,从而消除了对Apache的需求。
我研究了Undertow的javadocs。Undertow.Builder类具有两个具有以下签名的addHttpsListener方法:
public Builder addHttpsListener(int port, String host, KeyManager[] keyManagers, TrustManager[] trustManagers); public Builder addHttpsListener(int port, String host, SSLContext sslContext) {
所以看来我可以在使用Builder API引导Undertow时使用它们,例如
Undertow server = Undertow.builder() .addHttpsListener(8443, "localhost", sslContext) .build();
我不确定如何创建SSLContext变量,或者如何配置KeyManager和TrustManager。拥有mod_ssl使用的证书文件后,如何继续对Undertow启用HTTPS?
更新:
根据hwellmann的回答,我已经重用了SslContextFactory.createSslContext()方法。在此之前,我必须将公钥/私钥对转换为PKCS12格式,并将其导入Java密钥库中。
SslContextFactory.createSslContext()
提供下面的SSL转换转换/导入命令(从此处和此处获取),希望这些命令对任何人都有用:
# Convert to PKCS12 $ openssl pkcs12 -export -out output_cert.pfx -inkey input_cert.key -in input_cert.crt -certfile intermediate.crt # Import into Java keystore $ keytool -v -importkeystore -srckeystore output_cert.pfx -srcstoretype PKCS12 -destkeystore output_store.jks -deststoretype JKS
这并不是Undertow真正特定的,这只是从带有证书的密钥库中构建SSL上下文的问题。
请参阅有关SslContextFactory.javaUndertow的示例。
SslContextFactory.java