【发布时间】:2016-12-16 04:52:03
【问题描述】:
我正在使用嵌入式 Jetty 9,我想允许 https 访问,但不允许 http。
我知道我可以轻松地在 Jetty web.xml 中配置重定向,但我在嵌入式版本中没有该文件。我知道我可以使用任何文件并从嵌入式版本中指向它,但这应该更容易。
所以我在这里搜索并找到了这个http://blog.anvard.org/articles/2013/10/05/jetty-ssl-server.html,作者说“当然,我们可以通过移除 HTTP 连接器来强制使用 HTTP/S。”
所以我就是这样做的:
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”时,这是否意味着你在 9443 上使用明文 http?
-
是的。我在浏览器中输入了
http://...并收到了一些加密的东西。没有重定向到非http端口时正常吗? -
是
http://xxxxx:9443吗?因为这完全可以预期会收到加密握手或不支持明文的通知。 -
是的,它是
http://xxxxx:9443。我想这是我收到的握手,但想确定一下。 [@JohnnyV 感谢您的回答,如果您想将此作为答案发布,以便获得积分:) ] -
你能粘贴整个请求/响应吗?您收到 200 OK 回复的事实很奇怪,因为实际上所有内容都应该加密。在我让你认为这是一回事之前,我想仔细检查一下。
标签: java embedded-jetty