Skip to content

Instantly share code, notes, and snippets.

@taknb2nch
Last active May 18, 2016 04:53
Show Gist options
  • Save taknb2nch/fdf048908ad98e6a8829ce9670e0bd0c to your computer and use it in GitHub Desktop.
Save taknb2nch/fdf048908ad98e6a8829ce9670e0bd0c to your computer and use it in GitHub Desktop.
LastaFluteのサンプルHarborBootをSSL化します。

JettySSLBoot.javaの追加とHarborBoot.javaの修正に加えて、
jetty-bootのpom.xmlから以下をローカルプロジェクトのpom.xmlに追加。

<properties>
	<jetty.version>9.3.8.v20160314</jetty.version>
</properties>
<!-- jetty -->
<dependency>
	<groupId>org.eclipse.jetty.aggregate</groupId>
	<artifactId>jetty-all</artifactId>
	<classifier>uber</classifier>
	<version>${jetty.version}</version>
	<exclusions>
	・・・
	</exclusions>
</dependency>

jettyは9.3.8系以降を使用しないと、起動時のログに表示されるURLのスキームが正しく表示されません。
486511 - Server.getURI() returns wrong scheme on SSL/HTTPS

package org.docksidestage;
public class HarborBoot {
public static void main(String[] args) {
new JettySSLBoot(8443, "/harbor", ".keystore", "storepass", "keypass").asDevelopment(isNoneEnv()).bootAwait();
}
private static boolean isNoneEnv() {
return System.getProperty("lasta.env") == null;
}
}
package org.docksidestage;
import org.dbflute.jetty.JettyBoot;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.SecureRequestCustomizer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.webapp.WebAppContext;
public class JettySSLBoot extends JettyBoot {
protected String keyStorePath;
protected String keyStorePassword;
protected String keyManagerPassword;
protected boolean useKeyManagerPassword = false;
public JettySSLBoot(int port, String contextPath, String keyStorePath, String keyStorePassword) {
super(port, contextPath);
this.keyStorePath = keyStorePath;
this.keyStorePassword = keyStorePassword;
}
public JettySSLBoot(int port, String contextPath, String keyStorePath, String keyStorePassword, String keyManagerPassword) {
this(port, contextPath, keyStorePath, keyStorePassword);
this.keyManagerPassword = keyManagerPassword;
this.useKeyManagerPassword = true;
}
@Override
protected void prepareServer() {
final WebAppContext context = prepareWebAppContext();
server = new Server();
HttpConfiguration httpsConfig = new HttpConfiguration();
httpsConfig.setSecureScheme("https");
httpsConfig.setSecurePort(port);
httpsConfig.addCustomizer(new SecureRequestCustomizer());
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(this.keyStorePath);
sslContextFactory.setKeyStorePassword(this.keyStorePassword);
if (this.useKeyManagerPassword) {
sslContextFactory.setKeyManagerPassword(this.keyManagerPassword);
}
ServerConnector sslConnector =
new ServerConnector(server, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
new HttpConnectionFactory(httpsConfig));
sslConnector.setHost(getServerHost());
sslConnector.setPort(port);
server.addConnector(sslConnector);
server.setHandler(context);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment