2013-01-16 70 views
19

我正在使用jetty 9.0.0.M4版本,并试图将其配置为接受SSL连接。 按照指示: http://www.eclipse.org/jetty/documentation/current/configuring-connectors.html以编程方式为Jetty 9嵌入式配置SSL

我已经设法写出了一些有用的东西。然而,我写的代码看起来很丑陋,不必要的复杂。 任何想法如何正确地做到这一点?

final Server server = new Server(Config.Server.PORT); 

SslContextFactory contextFactory = new SslContextFactory(); 
contextFactory.setKeyStorePath(Config.Location.KEYSTORE_LOCATION); 
contextFactory.setKeyStorePassword("******"); 
SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(contextFactory, org.eclipse.jetty.http.HttpVersion.HTTP_1_1.toString()); 

HttpConfiguration config = new HttpConfiguration(); 
config.setSecureScheme("https"); 
config.setSecurePort(Config.Server.SSL_PORT); 
config.setOutputBufferSize(32786); 
config.setRequestHeaderSize(8192); 
config.setResponseHeaderSize(8192); 
HttpConfiguration sslConfiguration = new HttpConfiguration(config); 
sslConfiguration.addCustomizer(new SecureRequestCustomizer()); 
HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(sslConfiguration); 

ServerConnector connector = new ServerConnector(server, sslConnectionFactory, httpConnectionFactory); 
connector.setPort(Config.Server.SSL_PORT); 
server.addConnector(connector); 

server.start(); 
server.join(); 
+0

关于这个问题的不错工作 –

回答

10

ServerConnector应设置与SslContextFactory

您在HttpConfiguration中所做的其余工作与设置SSL无关。

embedded jetty examples项目中维护嵌入模式下设置SSL的一个很好的示例。 http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java

编辑:更清晰(感谢埃里克)

更新:2016年6月

Eclipse的码头项目已将其规范资源库github上。

以上LikeJettyXml.java现在可以在

https://github.com/eclipse/jetty.project/blob/jetty-9.4.x/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java

+0

“您在HttpConfiguration中所做的其余工作是不必要的。” - 有没有更好的方法来设置请求/响应头的大小? – Trejkaz

+0

我不是说你不能使用它,只是它通常不需要完成你在问题中提出的目标。如果你需要控制头文件,那么一定要使用HttpConfiguration。 –

+0

@JoakimErdfelt:我不得不承认*“不必要”*部分也使我困惑了几分钟......或许说*“与建立SSL无关”*会更好。否则+1 –

4

中找到码头9有一个很好的参考here和所有你需要做的就是创建JKS密钥库文件解释here。 使用命令keytool -genkey -alias sitename -keyalg RSA -keystore keystore.jks -keysize 2048。由于某种原因,什么与码头8工作是不是什么在9上工作。

-1

对于那些不能得到以上配置工作: 如果您使用Java 1.7,请确保您有最新的更新。首先版本的jvm 1.7导致访问https网页时出现问题(浏览器可能会显示:连接重置,连接中止或没有数据收到错误)。