仅使用带有HTTPS的嵌入式Jetty 9

我正在使用嵌入式Jetty 9,我想允许https访问,但没有http。

我知道我可以在Jetty web.xml中轻松配置重定向,但我在嵌入式版本中没有该文件。 我知道我可以使用任何文件并从嵌入式版本指向它,但这应该更容易。

所以我在这里搜索并发现了这个http://blog.anvard.org/articles/2013/10/05/jetty-ssl-server.html其中作者声明“当然,我们可以强制使用HTTP / S只需删除HTTP连接器。“

所以我做到了这一点:

Server server = new Server(); SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(keystoreFile.getAbsolutePath()); sslContextFactory.setKeyStorePassword(Keys.DOMAIN_CERTIFICATE_JKS_KEYSTORE_PASSWORD); sslContextFactory.setKeyManagerPassword(Keys.DOMAIN_CERTIFICATE_KEY_MANAGER_PASSWORD); HttpConfiguration httpsConfiguration = new HttpConfiguration(); SecureRequestCustomizer secureRequestCustomizer = new SecureRequestCustomizer(); httpsConfiguration.addCustomizer(secureRequestCustomizer); ServerConnector serverConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(httpsConfiguration)); serverConnector.setHost("192.168.0.5"); serverConnector.setPort(9443); serverConnector.setIdleTimeout(15000); server.setConnectors(new Connector[] { serverConnector }); 

问题:它似乎不起作用。 https运行正常,但是当我访问http时,我在主体中得到200 OK响应(而不是预期的json响应)。 所以服务器似乎处理请求,但加密错误,无论如何。 或者我忽略了什么,我的配置很糟糕?

http wireshark响应

据我所知,你做的一切都正确。 连接到SSL端口并发送常规HTTP(没有SSL握手)正在返回SSL警报消息。 尽管甚至没有收到HTTP响应,但您的HTTP客户端(出于某种原因)正在为您提供200 OK消息。

您收到的是SSL警报消息。

 15 03 03 00 02 02 50 // response 15 = ALERT 03 03 = SSL version (TLS 1.x) 00 02 = Message Length 02 50 = Message