zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

Undertow中的HTTPS

2023-04-18 12:52:41 时间

我有一个在Tomcat上运行的Web服务,并决定尝试使用Undertow。一般来说,这很好,但我需要HTTPS支持,并且无法启用它。下面是一些代码的HelloWorld:Undertow中的HTTPS

DeploymentInfo servletBuilder = deployment() 
      .setClassLoader(ServletServer.class.getClassLoader()) 
      .setContextPath("/") 
      .setDeploymentName("AuthenticationService.war") 
      .addServlet(servlet("WSServlet", WSServlet.class)) 
      .addListener(listener(WSServletContextListener.class)) 
      .setResourceManager(new FileResourceManager(new File("src/main/webapp"), 100)); 

    DeploymentManager manager = defaultContainer().addDeployment(servletBuilder); 
    manager.deploy(); 

    HttpHandler servletHandler = manager.start(); 

    SSLContext context = createSSLContext(loadKeyStore("server-keystore.jsk"), loadKeyStore("server-truststore.jks")); 
    PathHandler path = Handlers.path(servletHandler); 

    Undertow server = Undertow.builder() 
      .addHttpsListener(8443, "localhost", context) 
      .setHandler(path) 
      .build(); 
    server.start(); 

而且createSSLContext方法:

private static SSLContext createSSLContext(final KeyStore keyStore, final KeyStore trustStore) throws Exception { 
    KeyManager[] keyManagers; 
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    keyManagerFactory.init(keyStore, /* password */); 
    keyManagers = keyManagerFactory.getKeyManagers(); 

    TrustManager[] trustManagers; 
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    trustManagerFactory.init(trustStore); 
    trustManagers = trustManagerFactory.getTrustManagers(); 

    SSLContext sslContext; 
    sslContext = SSLContext.getInstance("TLS"); 
    sslContext.init(keyManagers, trustManagers, null); 

    return sslContext; 
} 

而且loadKeyStore方法:

private static KeyStore loadKeyStore(String name) throws Exception { 
    final InputStream stream = new FileInputStream(name); 

    try(InputStream is = stream) { 
     KeyStore loadedKeystore = KeyStore.getInstance("JKS"); 
     loadedKeystore.load(is, /* password */); 
     return loadedKeystore; 
    } 
} 

服务器开始,而是试图将请求发送到https://localhost:8443/ ..没有影响,没有日志或例外或一些反应。当使用http://localhost:8443它抛出异常

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

我是新来的所有的网络技术,使所有可能很奇怪。那么这里有什么问题?

goldaniga

这是否与HTTP侦听器相同的部署工作? –

你知道了吗? –

回答

我不知道,但自签名和/或不信任的证书会造成问题,但你应该得到一些例外asbout这个

我不知道知道什么是undertow,但您可以从文档检查SSL配置。

您还需要检查服务器和客户端是否支持公用密码和协议
例如,JRE的默认包不支持AES_256

Undertow中的HTTPS