サンプルjHipsterアプリを作成しました。次に、自己署名SSL証明書を追加し、ローカルでテストしてhttpsにアクセスできるようにします。これを達成する方法は?
これらの手順は、JHipsterのベースとなっているすべてのSpring Bootアプリケーションに適用されます。新しく生成された JHipster 2.7 プロジェクトでこれをテストしました。
最初から始める場合は、次の手順を完了する必要があります。
まず、プロジェクトディレクトリで自己署名証明書を生成する必要があります。これは、Javaが提供するユーティリティスクリプトであるkeytool
を使用して実行できます。
keytool -genkey -alias Tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes
パスワードmypassword
を選択したので、これが次のステップで使用するものです。これを完了すると、現在のディレクトリにkeystore.p12
が表示されます。
application.properties
またはapplication.yml
に追加します次に、TomcatのHTTPSコネクタプロパティを追加する必要があります。プロパティ(yml)ファイルはsrc/main/resources/
にあり、application.yml
を更新する必要があります(または、次のプロパティを使用してapplication-dev.yml
での開発専用の場合:
server:
ssl:
key-store: keystore.p12
key-store-password: mypassword
keyStoreType: PKCS12
keyAlias: Tomcat
これで、mvn clean package
を使用してアプリケーションをMaven(またはJHipsterアプリケーション用に選択した場合はGradle)でパッケージ化し、mvn spring-boot:runを使用してアプリケーションを実行できます。 https:// localhost:808でアプリケーションにアクセスできるようになりました
簡単にするためにポートは変更しませんでしたが、理想的にはプロパティファイルでも変更する必要がありますが、application-dev.yml
およびapplication-prod.yml
で既に定義されているため、変更する必要があります。そこに入れるか、削除して一般的なapplication.yml
に入れます
application.properties
を介して1つのプロトコルのみを有効にできるため、上記のようにこれを行うとHTTPSのみが機能します。 HTTPも機能させ、HTTPSにリダイレクトする場合は、以下のような@Configuration
クラスを追加する必要があります
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory Tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
Tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return Tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.Apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
この応答は、基本的に同じテーマに関する私のブログ投稿のコピーです: http://www.drissamri.be/blog/Java/enable-https-in-spring-boot/
BrowserSync
を再度有効にする方法について Driss Amriの素晴らしい回答 を拡張するには。
Httpをサポートしないことを選択した場合、またはhttpがhttpsにリダイレクトされた場合、BrowserSync
は機能しません。再び機能させるために、以下の変更はほとんど必要ありません。
gulp/config.js、apiPort
およびuri
apiPort: 8443,
uri: 'https://localhost:',
gulp/serve.js:options.rejectUnauthorized = false;
をproxyRoutes
に追加して、ノードが自己署名証明書について文句を言わないようにします。
proxyRoutes.map(function (r) {
var options = url.parse(baseUri + r);
options.route = r;
options.preserveHost = true;
options.rejectUnauthorized = false;
return proxy(options);
}));
必要に応じて、BrowserSync
にもhttps経由でコンテンツを提供させます。トラブルを避けるために、Spring Social
を使用することをお勧めします。 https: true
をgulp/serve.jsのbrowserSync
呼び出しに追加するだけです:
browserSync({
open: true,
port: config.port,
server: {
baseDir: config.app,
middleware: proxies
},
https: true
});
これで、BrowserSyncは、出荷時に自己署名証明書を使用してコンテンツを提供します。 Spring Boot
用に作成されたものを再利用できます。詳細は BrowserSyncホームページ をご覧ください。
Gulpの代わりにwebpackを使用している場合は、 Driss Amri's answerを2つの変更で完了することができます。
変更proxy.conf.json:
{
"*": {
"target": "https://localhost:8443",
"secure": true
}
}
これにより、APIリクエストが新しいhttpsアドレスにリダイレクトされます。次に、たとえばwebpackファイルもここで変更しますwebpack.dev.js変更例:
module.exports = webpackMerge(commonConfig({ env: ENV }), {
devtool: 'eval-source-map',
devServer: {
contentBase: './target/www',
proxy: [{
context: [
/* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */
'/api',
'/management', ...
'/auth'
],
target: 'https://127.0.0.1:8443',
/* set secure to false here, otherwise self-signed certification cause DEPTH_ZERO_SELF_SIGNED_CERT proxy errors */
secure: false
}]
},