没有 SSL 下一个协议协议的协议工厂:服务器连接器中的'HTTP/1.1'



当创建如下所示的 Jetty ServerConnector 时:

Server server = new Server();
SslContextFactory sslContextFactory = new SslContextFactory();
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()));

启动服务器时出现以下错误:

java.lang.IllegalStateException: No protocol factory for SSL next protocol: 'HTTP/1.1' in ServerConnector@37918c79{SSL,[ssl]}{0.0.0.0:7443}
at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:278)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:81)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:235)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.server.Server.doStart(Server.java:395)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
[...]

您缺少构成SSL+HTTP(又名HTTPS(连接的HTTP部分。

提示:如果您没有看到HttpConfigurationHttpConnectionFactory传递到您的ServerConnector则说明您没有将该ServerConnector用于 HTTP。(代理,Unixsocket,JNI连接器,自定义连接器等就是这种情况(

典型的设置是...

int httpsPort = 8443;
HttpConfiguration http_config = new HttpConfiguration();
http_config.setSecureScheme("https");
http_config.setSecurePort(httpsPort);
// TODO: Setup non-SSL/TLS Connector/Port here (using http_config) and
// set it to auto-redirect to SSL/TLS port.
// SSL Context Factory
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath("/path/to/keystore");
sslContextFactory.setKeyStorePassword(...);
sslContextFactory.setKeyManagerPassword(...);
sslContextFactory.setTrustStorePath("/path/to/keystore");
sslContextFactory.setTrustStorePassword(...);
// SSL HTTP Configuration
HttpConfiguration https_config = new HttpConfiguration(http_config);
https_config.addCustomizer(new SecureRequestCustomizer()); // so that servlets can see the
// encryption details
// SSL Connector
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
new HttpConnectionFactory(https_config)); // <-- the argument you were missing
sslConnector.setPort(httpsPort);
server.addConnector(sslConnector);

最新更新