gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:36:30 28 4
gpt4 key购买 nike

我正在使用嵌入式 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 wireshark response

最佳答案

据我所知,您所做的一切都是正确的。连接到 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

关于java - 仅使用带有 HTTPS 的嵌入式 Jetty 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862650/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com