java – 在Undertow中启用HTTPS

我们有一个有效的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变量,或者如何配置KeyManagers和TrustManagers.
 拥有mod_ssl正在使用的证书文件,如何继续为Undertow启用HTTPS?

更新:

根据hwellmann的回答,我重用了SslContextFactory.createSslContext()方法.在此之前,我必须将我的公钥/私钥对转换为PKCS12格式并将其导入Java密钥库.

给出SSL转换转换/导入命令(取自herehere),希望这对任何人都有用:

# 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上下文的问题.

有关Undertow使用的示例,请参阅SslContextFactory.java.

上一篇:输入输出流之复制


下一篇:如何从命令行显示Java密钥库SecretKeyEntry