嵌入式Tomcat启用SSL

时间:2015-06-24 18:01:19

标签: java tomcat ssl https

我正在尝试为嵌入式Tomcat设置SSL。两个连接器都启动但我只得到http的响应。在https上我得到chrome a"没有数据收到消息"当我尝试http://localhost:9000/时 该港口是开放的: 我试过telnet   telnet localhost 9000 我有一个联系。 我也试过了   openssl s_client -connect localhost:9000 和GET /方法 我的servlet在控制台中打印出预期的结果。我不明白为什么我在浏览器中遇到这个错误(chrome和Firefox) 我的操作系统是Ubuntu 14.04,我尝试过Java 7和Java 8都有相同的结果。来自Maven repo的Tomcat版本是8.0.23 代码是:

public class Main {

public static void main(String[] args) throws Exception {
    Tomcat tomcat = new Tomcat();
    Service service = tomcat.getService();
    service.addConnector(getSslConnector());


    File base = new File(System.getProperty("java.io.tmpdir"));
    Context rootCtx = tomcat.addContext("/", base.getAbsolutePath());
    Tomcat.addServlet(rootCtx, "emptyServlet", new EmptyServlet());
    rootCtx.addServletMapping("/*", "emptyServlet");
    tomcat.start();
    tomcat.getServer().await();

}

private static Connector getSslConnector() {
    Connector connector = new Connector();
    connector.setPort(9000);
    connector.setSecure(true);
    connector.setScheme("https");
    connector.setAttribute("keyAlias", "tomcat");
    connector.setAttribute("keystorePass", "password");
    connector.setAttribute("keystoreType", "JKS");
    connector.setAttribute("keystoreFile",
            "keystore.jks");
    connector.setAttribute("clientAuth", "false");
    connector.setAttribute("protocol", "HTTP/1.1");
    connector.setAttribute("sslProtocol", "TLS");
    connector.setAttribute("maxThreads", "200");
    connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol");
    connector.setAttribute("SSLEnabled", true);
    return connector;
 }
}

您可以在github

上找到密钥库

我已经尝试过不同的密钥库但结果相同。此外,密钥库看起来还不错:keytool -list -keystore keystore.jks似乎与预期一致。   提前致谢

1 个答案:

答案 0 :(得分:0)

原来是我的错。该服务已启动并正在运行,但我继续在浏览器中尝试http://localhost:9000而不是https://locahost:9000