SpringBootで自己署名証明書を使用するHTTPS
1. 概要
このチュートリアルでは、Spring BootでHTTPSを有効にする方法を学習します。 この目的のために、自己署名証明書を生成し、簡単なアプリケーションを構成します。
Spring Bootプロジェクトの詳細については、多数のリソースここを参照してください。
2. 自己署名証明書の生成
始める前に、自己署名証明書を作成します。 次の証明書形式のいずれかを使用します。
- PKCS12:公開鍵暗号化標準はパスワードで保護された形式であり、複数の証明書と鍵を含めることができます。 これは業界全体で使用されている形式です。
- JKS: JavaKeyStoreはPKCS12に似ています。 これは独自の形式であり、Java環境に限定されています。
keytoolまたはOpenSSLツールのいずれかを使用して、コマンドラインから証明書を生成できます。 KeytoolはJavaRuntimeEnvironmentに同梱されており、OpenSSLはこちらからダウンロードできます。
デモンストレーションでは、keytoolを使用しましょう。
2.1. キーストアの生成
次に、暗号化キーのセットを作成し、それらをキーストアに保存します。
次のコマンドを使用して、PKCS12キーストア形式を生成できます。
keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore baeldung.p12 -validity 3650
同じキーストアに任意の数のキーペアを保存でき、それぞれが一意のエイリアスで識別されます。
キーストアをJKS形式で生成するには、次のコマンドを使用できます。
keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -keystore baeldung.jks -validity 3650
業界標準の形式であるPKCS12形式を使用することをお勧めします。 したがって、すでにJKSキーストアがある場合は、次のコマンドを使用してPKCS12形式に変換できます。
keytool -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretype pkcs12
ソースキーストアパスワードを提供し、新しいキーストアパスワードも設定する必要があります。 エイリアスとキーストアのパスワードは後で必要になります。
3. SpringBootでHTTPSを有効にする
Spring Bootは、一連の宣言型を提供します
「/welcome」エンドポイントによって処理されるウェルカムページを含むSpringセキュリティを備えた単純なSpring Bootアプリケーションから始めます。
次に、前の手順で生成した「 baeldung.p12」という名前のファイルを、「 src / main / resources /keystore」ディレクトリにコピーします。
3.1. SSLプロパティの構成
次に、SSL関連のプロパティを構成します。
# The format used for the keystore. It could be set to JKS in case it is a JKS file
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=classpath:keystore/baeldung.p12
# The password used to generate the certificate
server.ssl.key-store-password=password
# The alias mapped to the certificate
server.ssl.key-alias=baeldung
Springセキュリティ対応アプリケーションを使用しているので、HTTPS要求のみを受け入れるように構成しましょう。
server.ssl.enabled=true
4. HTTPSURLを呼び出す
アプリケーションでHTTPSを有効にしたので、クライアントに移り、自己署名証明書を使用してHTTPSエンドポイントを呼び出す方法を調べてみましょう。
まず、トラストストアを作成する必要があります。 PKCS12ファイルを生成したので、トラストストアと同じものを使用できます。 トラストストアの詳細の新しいプロパティを定義しましょう。
#trust store location
trust.store=classpath:keystore/baeldung.p12
#trust store password
trust.store.password=password
次に、トラストストアで SSLContext を準備し、カスタマイズされた RestTemplate:を作成する必要があります。
RestTemplate restTemplate() throws Exception {
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray())
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
HttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
HttpComponentsClientHttpRequestFactory factory =
new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(factory);
}
デモのために、Springセキュリティがすべての着信要求を許可することを確認しましょう。
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/**")
.permitAll();
}
最後に、HTTPSエンドポイントを呼び出すことができます。
@Test
public void whenGETanHTTPSResource_thenCorrectResponse() throws Exception {
ResponseEntity<String> response =
restTemplate().getForEntity(WELCOME_URL, String.class, Collections.emptyMap());
assertEquals("<h1>Welcome to Secured Site</h1>", response.getBody());
assertEquals(HttpStatus.OK, response.getStatusCode());
}
5. 結論
この記事では、最初に、SpringBootアプリケーションでHTTPSを有効にするための自己署名証明書を生成する方法を学びました。 次に、HTTPS対応のエンドポイントを呼び出す方法について説明しました。
いつものように、完全なソースコードはGitHubリポジトリにあります。
最後に、コードサンプルを実行するには、pom.xmlの次のstart-classプロパティのコメントを解除する必要があります。
<start-class>com.baeldung.ssl.HttpsEnabledApplication</start-class>