第1章 TLS レジストリーによるセキュリティー鍵および証明書の管理
TLS レジストリーは、TLS 設定を一元管理する Quarkus エクステンションです。アプリケーション全体のセキュアな接続の管理と保守を容易にします。TLS 設定を 1 カ所で集中して定義する場合、TLS レジストリーを使用して、アプリケーション内の複数のコンポーネントからこの設定を参照できます。これにより、一貫性が確保され、設定エラーの可能性が軽減されます。
TLS レジストリーは設定を統合し、複数の名前付き設定をサポートしています。したがって、さまざまなアプリケーションパーツに合わせて TLS 設定をカスタマイズできます。この柔軟性は、各コンポーネントに異なるセキュリティー設定が必要な場合に特に役立ちます。
Quarkus REST、gRPC などの互換性のあるエクステンションを使用すると、TLS レジストリーエクステンションがプロジェクトに自動的に追加されます。そのため、TLS レジストリーを使用するアプリケーションは、すぐにセキュアな通信を処理できるようになります。
TLS レジストリーは、証明書の自動再読み込みと、PKCS12、PEM、JKS などのさまざまなキーストアフォーマットとの互換性も提供します。
1.1. TLS レジストリーの使用
鍵やトラストストアを含め、TLS 接続を設定するには、quarkus.tls.*
プロパティーを使用します。このプロパティーは次の場合に必要です。
-
デフォルトの TLS 設定を設定する (
quarkus.tls.*
の直下に定義)。 -
quarkus.tls.<name>.*
を使用して、個別の名前付き設定を作成する。quarkus.tls.<name>.*
プロパティーを指定することで、特定のコンポーネントの TLS 設定を調整できます。
1.1.1. HTTP サーバーの HTTPS の設定
クライアントとサーバー間のセキュアな通信を確保するには、多くの場合、クライアントがサーバーの信頼性を検証する必要があります。
- サーバーは証明書と秘密鍵を含むキーストアを使用する必要があります。
- サーバーの証明書を検証するために、クライアントにトラストストアを設定する必要があります。
TLS ハンドシェイク中に、サーバーは証明書を提示し、クライアントがそれを検証します。これにより、中間者攻撃を防ぎ、データ転送をセキュアに行うことができます。
次のセクションでは、PEM または PKCS12 キーストアタイプを使用して HTTPS を設定する方法を説明します。さらに、名前付き設定を使用して複数の TLS 設定を一度に指定および管理する方法も説明します。この方法を使用すると、それぞれに個別の設定を定義できます。
キーストアタイプに応じて、次のいずれかの設定例を使用してください。
PEM ファイルを使用する場合:
quarkus.tls.key-store.pem.0.cert=server.crt quarkus.tls.key-store.pem.0.key=server.key quarkus.http.insecure-requests=disabled # Reject HTTP requests
p12
(PKCS12) キーストアを使用する場合:quarkus.tls.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret quarkus.http.insecure-requests=disabled # Reject HTTP requests
複数の設定を名前で区別する場合:
quarkus.tls.https.key-store.p12.path=server-keystore.p12 quarkus.tls.https.key-store.p12.password=secret quarkus.http.insecure-requests=disabled quarkus.http.tls-configuration-name=https
1.1.2. クライアントの HTTPS の設定
次の例では、"hello" という名前の gRPC クライアントを、デフォルトの TLS 設定のトラストストアと HTTPS を使用するように設定します。
quarkus.tls.trust-store.jks.path=grpc-client-truststore.jks quarkus.tls.trust-store.jks.password=password quarkus.grpc.clients.hello.plain-text=false quarkus.grpc.clients.hello.use-quarkus-grpc-client=true
1.1.3. mTLS の設定
Red Hat build of Quarkus アプリケーションで相互 TLS (mTLS) を設定するには、サーバーとクライアントにキーストアとトラストストアの両方を作成して管理することで、それぞれを設定します。
- サーバーのキーストア: サーバーの証明書と秘密鍵が格納されます。
- クライアントのキーストア: クライアントの証明書と秘密鍵が格納されます。
- サーバーのトラストストア: クライアントを認証するためのクライアント証明書が保存されます。
クライアントのトラストストア: サーバーを認証するためのサーバーの証明書が保存されます。
キーストアとトラストストアを指定するための設定例:
quarkus.tls.my-server.key-store.p12.path=target/certs/grpc-keystore.p12 quarkus.tls.my-server.key-store.p12.password=password quarkus.tls.my-server.trust-store.p12.path=target/certs/grpc-server-truststore.p12 quarkus.tls.my-server.trust-store.p12.password=password quarkus.tls.my-client.trust-store.p12.path=target/certs/grpc-client-truststore.p12 quarkus.tls.my-client.trust-store.p12.password=password quarkus.tls.my-client.key-store.p12.path=target/certs/grpc-client-keystore.p12 quarkus.tls.my-client.key-store.p12.password=password quarkus.grpc.clients.hello.plain-text=false quarkus.grpc.clients.hello.tls-configuration-name=my-client quarkus.grpc.clients.hello.use-quarkus-grpc-client=true quarkus.http.ssl.client-auth=REQUIRED # Enable mTLS quarkus.http.insecure-requests=disabled quarkus.http.tls-configuration-name=my-server quarkus.grpc.server.use-separate-server=false quarkus.grpc.server.plain-text=false
この設定により、サーバーとクライアントの両方が互いの証明書を検証することで mTLS が有効になり、セキュリティーがさらに強化されます。