1概要

このチュートリアルでは、Spring BootアプリケーションでHTTPSを有効にする例を段階的に説明します。

自己署名証明書を生成し、それをサンプルアプリで設定します。 Spring Bootプロジェクトの詳細については、https://www.baeldung.com/spring-boot[here]を参照してください。


2自己署名証明書の生成

始める前に、自己署名証明書を作成します。次のいずれかの証明書形式を使用します。

  • PKCS12:https://en.wikipedia.org/wiki/PKCS__12[公開鍵暗号化]

Standards]はパスワードで保護された形式で、複数の形式を含めることができます。
証明書とキー業界で使用されているフォーマットです
** JKS:https://en.wikipedia.org/wiki/Keystore[Java KeyStore]も同様です。

PKCS12へ。これは独自のフォーマットであり、Java環境に限定されています。

keytoolまたはOpenSSLのどちらのツールを使用しても、コマンドラインから証明書を生成できます。


Keytool

はJava Runtime Environmentに同梱されており、OpenSSLはhttps://www.openssl.org/からダウンロードできます。[ここに]。

デモには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 Spring BootでHTTPSを有効にする

Spring Bootは宣言的な__https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-configure-ssl[server.ssl。** properties]のセットを提供します。 HTTPSを設定するためのサンプルアプリケーションのこれらのプロパティ。



/welcome

」エンドポイントで処理されるウェルカムページを含む、シンプルなSpring Bootアプリケーションhttps://www.baeldung.com/spring-boot-security-autoconfiguration[With Spring Security]から始めます。

前の手順で生成した「

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 Security対応のアプリケーションを使用しているので、HTTPSリクエストのみを受け付けるように設定しましょう。

security.require-ssl=true


4 HTTPS URLを呼び出す

アプリケーションで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 Security

__がすべての受信リクエストを許可するようにしましょう。

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結論

チュートリアルでは、Spring BootアプリケーションでHTTPSを有効にするための自己署名証明書の生成方法について学びました。また、HTTPS対応のエンドポイントを呼び出す方法も学びました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-security-mvc-boot[GitHub repository]にあります。

最後に、コードサンプルを実行するには、

pom.xml

の次のstart-classプロパティのコメントを解除する必要があります。

<start-class>org.baeldung.ssl.HttpsEnabledApplication</start-class>