我正在尝试为嵌入式Tomcat设置SSL。两个连接器都启动,但是我只能在http上得到响应。在https上,当我尝试访问chrome时会看到“未收到数据消息”。http://localhost:9000/ 该端口已打开:我已经尝试使用telnet telnet localhost 9000 并建立了连接。我也尝试过 openssl s_client -connect localhost:9000 GET / method和我的servlet在控制台中向我打印预期的结果。我不明白为什么在浏览器(chrome和Firefox)中会出现此错误。我的操作系统是Ubuntu 14.04,并且我尝试使用Java 7和Java 8获得相同的结果。Maven回购中的Tomcat版本是8.0.23,代码是:
http://localhost:9000/
telnet localhost 9000
openssl s_client -connect localhost:9000
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似乎与预期的一样。提前致谢
keytool -list -keystore keystore.jks
原来是我的错。该服务已启动并正在运行,但我一直尝试在浏览器中尝试使用http:// localhost:9000而不是https:// locahost:9000