Spring Boot による HTTPS アクセスの設定
証明書の生成
- 新しい証明書を作成する
keytool -genkeypair -alias hellowood -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore hellowood.p12 -validity 3650
Enter the keystore passphrase:
Enter the new password again:
What is your first and last name?
[Unknown]: HellWood
What is the name of your organization?
[Unknown]: HelloWood
What is the name of your organization?
[Unknown]: HelloWood
What is the name of your city or region?
[Unknown]: BJ
What is the name of your province/city/region?
[Unknown]: BJ
What is the two-letter country/region code for this unit?
[Unknown]: CN
Is CN=HellWood, OU=HelloWood, O=HelloWood, L=BJ, ST=BJ, C=CN correct?
[No]: y
これにより
hellowood.p12
この証明書
すでに証明書をお持ちの場合は、その証明書をPKCS形式に変換することができます。
keytool -import -alias hellowood -file hellowood.crt -keystore hellowood.p12
// or
keytool -importkeystore -srckeystore hellowood.jks -destkeystore hellowood.p12 -deststoretype pkcs12
HTTPSの設定
を設定します。
hellowood.p12
に追加します。
resources/
下
application.properties
# SSL config
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:hellowood.p12
server.ssl.key-store-password=123456
server.ssl.key-alias=hellowood
server.ssl.enabled=true
インターフェースの追加
@RestController
public class BaseController {
@GetMapping("/")
public String root() {
return "HelloWood";
}
}
アプリケーションを起動すると、ログにHTTPSで起動したことが表示されることがわかります
2018-12-31 21:54:07.940 INFO 24001 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat はポート (s): 8080 (https) でコンテキストパス ''で起動しました。
http://localhost:8080 にアクセスすると、アクセスに HTTPS が必要であることを示すプロンプトが表示されます。
curl http://localhost:8080/
不正なリクエスト
このホストとポートの組み合わせはTLSを必要とします。
https://localhost:8080 にアクセスすると、正常に HelloWood を返します。
curl --insecure https://localhost:8080
ハローウッド
HTTP を HTTPS にリダイレクトする
HTTPポートを追加するようにポートを修正する(application.properties)
server.port=8443
server.port.http=8080
リダイレクト設定の追加
ConnectorConfig.java
import org.apache.catalina.Context;
import org.apache.catalina.connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation;
import org.springframework.context.annotation;
@Configuration
public class ConnectorConfig {
@Value("${server.port.http}")
private int serverPortHttp;
@Value("${server.port}")
private int serverPortHttps;
@Bean
public ServletWebServerFactory servletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection securityCollection = new SecurityCollection();
securityCollection.addPattern("/*");
securityConstraint.addCollection(securityCollection);
context.addConstraint(securityConstraint);
}
};
factory.addAdditionalTomcatConnectors(redirectConnector());
return factory;
}
private Connector redirectConnector() {
Connector connector = new Connector(Http11NioProtocol.class.getName());
connector.setScheme("http");
connector.setPort(serverPortHttp);
connector.setSecure(false);
connector.setRedirectPort(serverPortHttps);
return connector;
}
}
curl -v http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 302
< Cache-Control: private
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Location: https://localhost:8443/
< Content-Length: 0
< Date: Mon, 31 Dec 2018 14:31:44 GMT
<
* Connection #0 to host localhost left intact
アプリを再度起動し、HTTPとHTTPSのポート情報を含むログを確認します。
2018-12-31 22:17:47.113 INFO 24612 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8443 (https) 8080 (http) with context path ''(Tomcatはポートで起動しました)。
http://localhost:8080 にアクセスすると、https://localhost:8443 にリダイレクトされます。
https://localhost:8443
-
アクセス方法
HelloWood curl https://localhost:8443 --insecure HelloWood%
通常復帰HelloWood curl https://localhost:8443 --insecure HelloWood%
取得元:https://www.cnblogs.com/powerwu/articles/10981056.html
関連
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
プロローグでのコンテンツは禁止されています
-
自動配線された依存性のインジェクションに失敗しました。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
JSPで「リストが型解決できない!」の解決方法
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
Java-Myeclipse エラー解決 構文エラー、TryStatem を完了するために "Finally" を挿入する。
-
SyntaxError: JSON入力の予期せぬ終了 解決策とアイデア
-
java Exception problem: unhandled exception: java.lang.
-
ajaxでエクセルをアップロードする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
SpringBootApplication を型解決できない。
-
Dateが型に解決できない問題を解決する
-
をインスタンス化することができません。
-
JQuery DataTable 详解
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
java 例外。Javaツールの初期化
-
Java言語プログラミング(基礎編)(第10版)練習問題解答編 第7章
-
Java文字列プレースホルダー使用