TLS レジストリーによるセキュリティー鍵および証明書の管理
概要
Red Hat build of Quarkus ドキュメントへのフィードバックの提供 リンクのコピーリンクがクリップボードにコピーされました!
エラーを報告したり、ドキュメントを改善したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- 次のリンクをクリックして チケットを作成します。
- Summary に課題の簡単な説明を入力します。
- Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
- Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。
第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
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 requestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret quarkus.http.insecure-requests=disabled # Reject HTTP requestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の設定を名前で区別する場合:
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
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=httpsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
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) を設定するには、サーバーとクライアントにキーストアとトラストストアの両方を作成して管理することで、それぞれを設定します。
- サーバーのキーストア: サーバーの証明書と秘密鍵が格納されます。
- クライアントのキーストア: クライアントの証明書と秘密鍵が格納されます。
- サーバーのトラストストア: クライアントを認証するためのクライアント証明書が保存されます。
クライアントのトラストストア: サーバーを認証するためのサーバーの証明書が保存されます。
キーストアとトラストストアを指定するための設定例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、サーバーとクライアントの両方が互いの証明書を検証することで mTLS が有効になり、セキュリティーがさらに強化されます。
1.2. TLS 設定の参照 リンクのコピーリンクがクリップボードにコピーされました!
TLS レジストリーの使用 で説明されているように、quarkus.tls.<name>.* プロパティーを使用して作成したサンプルの 名前付き 設定を参照するには、次の例に示すように tls-configuration-name プロパティーを使用します。
コア HTTP サーバーの設定例:
# Reference the named configuration quarkus.http.tls-configuration-name=MY_TLS_CONFIGURATION
# Reference the named configuration
quarkus.http.tls-configuration-name=MY_TLS_CONFIGURATION
gRPC クライアントの設定例:
quarkus.grpc.clients.hello.tls-configuration-name=MY_TLS_CONFIGURATION
quarkus.grpc.clients.hello.tls-configuration-name=MY_TLS_CONFIGURATION
1.3. TLS の設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS 設定は、キーストアとトラストストアの管理を中心としています。具体的な設定は、PEM、P12、JKS など、使用するフォーマットによって異なります。
次のセクションでは、TLS を設定するために使用できるさまざまなプロパティーを説明します。
1.3.1. キーストア リンクのコピーリンクがクリップボードにコピーされました!
キーストアは、秘密鍵と証明書を保存するために使用されます。これは主にサーバー側で使用されますが、mTLS を使用する場合はクライアント側でも使用できます。
1.3.1.1. PEM キーストア リンクのコピーリンクがクリップボードにコピーされました!
Privacy Enhanced Mail (PEM) キーストアは、ファイルペアのリストから構成されます。
-
証明書ファイル -
.crtまたは.pemファイル -
秘密鍵ファイル - 多くの場合は
.keyファイル
PEM キーストアを設定するには、次のように指定します。
quarkus.tls.key-store.pem.a.cert=server.crt quarkus.tls.key-store.pem.a.key=server.key quarkus.tls.key-store.pem.b.cert=my-second-cert.crt quarkus.tls.key-store.pem.b.key=my-second-key.key
quarkus.tls.key-store.pem.a.cert=server.crt
quarkus.tls.key-store.pem.a.key=server.key
quarkus.tls.key-store.pem.b.cert=my-second-cert.crt
quarkus.tls.key-store.pem.b.key=my-second-key.key
ほとんどの場合、必要なものは証明書と秘密鍵で構成される 1 つのペアだけです。証明書が証明書チェーンの一部である場合でも、キーストアに含まれる秘密鍵は、エンドエンティティー証明書に対応するもの 1 つだけです。
複数のペアが設定されている場合、設定された証明書と秘密鍵のペアの 1 つが、Server Name Indication (SNI) に基づいて選択されます。クライアントは接続しようとしているサーバーの名前を送信し、サーバーは適切な証明書と秘密鍵のペアを選択します。この機能を使用するには、クライアントとサーバーの両方で SNI が有効になっていることを確認してください。
複数の鍵ペアまたは証明書ペアを設定する場合、サーバーはデフォルトで名前の辞書順で設定されるペアを実行します。前の例の store.pem.a と store.pem.b を参照してください。辞書順が最も下位のペアが最初に実行されます。これを変更するには、quarkus.tls.key-store.pem.order プロパティーを使用して順序を定義します。たとえば、quarkus.tls.key-store.pem.order=b,c,a です。
この設定は、最初に指定されたペアをデフォルトとして使用するため、SNI を使用する場合に重要です。
1.3.1.2. PKCS12 キーストア リンクのコピーリンクがクリップボードにコピーされました!
PKCS12 キーストアは、証明書と秘密鍵を含む単一のファイルです。
PKCS12 キーストアを設定するには、次のように指定します。
quarkus.tls.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret
quarkus.tls.key-store.p12.path=server-keystore.p12
quarkus.tls.key-store.p12.password=secret
.p12 ファイルはパスワードで保護されているため、キーストアを開くにはパスワードを指定する必要があります。
このファイルには、複数の証明書と秘密鍵を含めることができます。その場合は、次のいずれかの操作を実行してください。
使用する証明書と秘密鍵のエイリアスを指定して設定します。
quarkus.tls.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret quarkus.tls.key-store.p12.alias=my-alias quarkus.tls.key-store.p12.alias-password=my-alias-password
quarkus.tls.key-store.p12.path=server-keystore.p12 quarkus.tls.key-store.p12.password=secret quarkus.tls.key-store.p12.alias=my-alias quarkus.tls.key-store.p12.alias-password=my-alias-passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow - または、SNI を使用して適切な証明書と秘密鍵を選択します。すべての鍵に同じパスワードを使用する必要があることに注意してください。
1.3.1.3. JKS キーストア リンクのコピーリンクがクリップボードにコピーされました!
JKS キーストアは、サーバーまたはクライアントの証明書と秘密鍵を含む単一のファイルです。TLS/SSL 接続で認証してセキュアな通信を確立するために使用されます。
JKS は古いフォーマットですが、今でも広く使用されている Java 固有のフォーマットです。ただし、このフォーマットを扱うには、現在では非推奨となっている特定の Java ツールを使用する必要があります。したがって、Red Hat build of Quarkus アプリケーションでの使用は推奨しません。
また、OpenShift cert-manager や Let’s Encrypt は、通常 JKS を提供せず、現在も PEM しか提供しません。
JKS キーストアを設定するには、次のように指定します。
quarkus.tls.key-store.jks.path=server-keystore.jks quarkus.tls.key-store.jks.password=secret
quarkus.tls.key-store.jks.path=server-keystore.jks
quarkus.tls.key-store.jks.password=secret
.jks ファイルはパスワードで保護されているため、キーストアを開くにはパスワードを指定する必要があります。また、複数の証明書と秘密鍵を含めることができます。その場合は、以下を実行します。
使用する証明書と秘密鍵のエイリアスを指定して設定します。
quarkus.tls.key-store.jks.path=server-keystore.jks quarkus.tls.key-store.jks.password=secret quarkus.tls.key-store.jks.alias=my-alias quarkus.tls.key-store.jks.alias-password=my-alias-password
quarkus.tls.key-store.jks.path=server-keystore.jks quarkus.tls.key-store.jks.password=secret quarkus.tls.key-store.jks.alias=my-alias quarkus.tls.key-store.jks.alias-password=my-alias-passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow - または、SNI を使用して適切な証明書と秘密鍵を選択します。すべての鍵に同じパスワードを使用する必要があることに注意してください。
1.3.1.4. SNI リンクのコピーリンクがクリップボードにコピーされました!
Server Name Indication (SNI) は、TLS ハンドシェイク中にクライアントが接続を試みるホスト名を指定できるようにする TLS エクステンションです。SNI を使用すると、サーバーが単一の IP アドレス上の複数のドメインに対して異なる TLS 証明書を提示できるようになります。これにより、仮想ホスティングシナリオでセキュアな通信が容易になります。
SNI を有効にするには、次のように指定します。
quarkus.tls.key-store.sni=true # Disabled by default
quarkus.tls.key-store.sni=true # Disabled by default
SNI が有効な場合、クライアントは TLS ハンドシェイク中にサーバー名を示します。これにより、サーバーが適切な証明書を選択できるようになります。
- PEM ファイルを使用してキーストアを設定する場合は、複数の証明書 (CRT) ファイルと鍵ファイルを提供する必要があります。CRT は、X.509 証明書ファイルの一般的なファイル拡張子であり、通常は PEM (Privacy-Enhanced Mail) フォーマットです。このファイルには公開証明書が含まれています。
- JKS または P12 ファイルを使用してキーストアを設定する場合、サーバーが TLS ハンドシェイク中にクライアントによって提供された SNI ホスト名に基づいて適切な証明書を選択します。サーバーは、SNI ホスト名を、キーストアに保存されている証明書に設定されているコモンネーム (CN) またはサブジェクト代替名 (SAN) と照合します。すべてのキーストアとエイリアスのパスワードが同一である必要があります。
1.3.1.5. 認証情報プロバイダー リンクのコピーリンクがクリップボードにコピーされました!
設定でキーストアのパスワードとエイリアスのパスワードを渡す代わりに、認証情報プロバイダーを使用できます。
認証情報プロバイダーは、キーストアとエイリアスのパスワードを取得する方法として機能します。認証情報プロバイダーは、設定でパスワードまたはエイリアスパスワードが設定されていない場合にのみ使用されることに注意してください。
認証情報プロバイダーを設定するには、次のように指定します。
認証情報プロバイダーは、PKCS12 および JKS キーストアでのみ使用できます。
1.3.2. トラストストア リンクのコピーリンクがクリップボードにコピーされました!
トラストストアは、信頼できる当事者の証明書を保存するために使用されます。通常の TLS では、クライアントがトラストストアを使用してサーバーを認証します。相互 TLS (mTLS) では、サーバーとクライアントの両方がトラストストアを使用して相互に認証します。
1.3.2.1. PEM トラストストア リンクのコピーリンクがクリップボードにコピーされました!
PEM トラストストアは、.crt ファイルまたは .pem ファイルのリストで構成されます。それぞれのファイルに証明書が含まれています。
PEM トラストストアを設定するには、次のように指定します。
quarkus.tls.trust-store.pem.certs=ca.crt,ca2.pem
quarkus.tls.trust-store.pem.certs=ca.crt,ca2.pem
1.3.2.2. PKCS12 トラストストア リンクのコピーリンクがクリップボードにコピーされました!
PKCS12 トラストストアは、証明書を含む単一のファイルです。複数の証明書が含まれている場合は、エイリアスを使用して適切な証明書を選択できます。
PKCS12 トラストストアを設定するには、次のように指定します。
quarkus.tls.trust-store.p12.path=client-truststore.p12 quarkus.tls.trust-store.p12.password=password quarkus.tls.trust-store.p12.alias=my-alias
quarkus.tls.trust-store.p12.path=client-truststore.p12
quarkus.tls.trust-store.p12.password=password
quarkus.tls.trust-store.p12.alias=my-alias
.p12 ファイルはパスワードで保護されているため、トラストストアを開くにはパスワードを指定する必要があります。ただし、キーストアとは異なり、トラストストアには秘密鍵ではなく公開証明書が含まれているため、エイリアスにパスワードは必要ありません。
1.3.2.3. JKS トラストストア リンクのコピーリンクがクリップボードにコピーされました!
JKS トラストストアは、複数の証明書を含む単一のファイルです。複数の証明書が存在する場合は、エイリアスを使用して適切な証明書を選択できます。ただし、JKS フォーマットは PKCS12 よりもセキュリティーが低いため、使用しないでください。
JKS トラストストアを設定するには、次のように指定します。
quarkus.tls.trust-store.jks.path=client-truststore.jks quarkus.tls.trust-store.jks.password=password quarkus.tls.trust-store.jks.alias=my-alias
quarkus.tls.trust-store.jks.path=client-truststore.jks
quarkus.tls.trust-store.jks.password=password
quarkus.tls.trust-store.jks.alias=my-alias
.jks ファイルはパスワードで保護されているため、トラストストアを開くにはパスワードを指定する必要があります。ただし、キーストアとは異なり、トラストストアには秘密鍵ではなく公開証明書が含まれているため、エイリアスにパスワードは必要ありません。
1.3.2.4. 認証情報プロバイダー リンクのコピーリンクがクリップボードにコピーされました!
設定でトラストストアのパスワードを渡す代わりに、認証情報プロバイダーを使用できます。認証情報プロバイダーを使用すると、パスワードやその他の認証情報を取得できます。認証情報プロバイダーは、設定でパスワードが指定されていない場合にのみ使用されることに注意してください。
認証情報プロバイダーを設定するには、次のように指定します。
認証情報プロバイダーは、PKCS12 および JKS トラストストアでのみ使用できます。
1.3.3. その他のプロパティー リンクのコピーリンクがクリップボードにコピーされました!
キーストアとトラストストアは最も重要なプロパティーですが、TLS を設定するために使用できる他のプロパティーもあります。
次の例では デフォルト の設定を使用していますが、プロパティーの前に設定名を付けることで、名前付き 設定を使用することもできます。
1.3.3.1. 暗号スイート リンクのコピーリンクがクリップボードにコピーされました!
暗号スイートは、TLS ハンドシェイク中に使用できる暗号のリストです。有効な暗号スイートの順序付きリストを設定できます。設定されていない場合は、組み込みの暗号の中から適切なデフォルトが選択されます。ただし、設定を指定すると、その設定が、使用中の SSL エンジンによって定義されているデフォルトスイートよりも優先されます。
暗号スイートを設定するには、次のように指定します。
quarkus.tls.cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
quarkus.tls.cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
1.3.3.2. TLS プロトコルのバージョン リンクのコピーリンクがクリップボードにコピーされました!
TLS プロトコルバージョンは、TLS ハンドシェイク中に使用できるプロトコルのリストです。有効な TLS プロトコルバージョンを、コンマ区切りの順序付きリストとして指定します。関連する設定プロパティーは、quarkus.tls.protocols (名前付き TLS 設定の場合は quarkus.tls.<name>.protocols) です。設定されていない場合は、デフォルトで TLSv1.3, TLSv1.2 になります。
使用可能なオプションは、TLSv1、TLSv1.1、TLSv1.2、および TLSv1.3 です。
たとえば、TLSv1.3 のみを有効にするには、次のように指定します。
quarkus.tls.protocols=TLSv1.3
quarkus.tls.protocols=TLSv1.3
1.3.3.3. ハンドシェイクのタイムアウト リンクのコピーリンクがクリップボードにコピーされました!
TLS 接続確立時の最初のステップは、ハンドシェイクフェーズです。このフェーズでは、クライアントとサーバーが接続を確立するために情報を交換します。これには通常、暗号スイート、TLS プロトコルバージョン、証明書の検証が含まれます。
ハンドシェイクフェーズのタイムアウトを設定するには、次のように指定します。
quarkus.tls.handshake-timeout=10S # Default.
quarkus.tls.handshake-timeout=10S # Default.
1.3.3.4. ALPN リンクのコピーリンクがクリップボードにコピーされました!
Application-Layer Protocol Negotiation (ALPN) は、TLS ハンドシェイク中にクライアントとサーバーが通信に使用するプロトコルをネゴシエートできるようにする TLS エクステンションです。ALPN は、TLS 接続を確立する前にクライアントが優先するアプリケーションプロトコルをサーバーに指示できるようにすることで、より効率的な通信を可能にします。
これは、複数のプロトコルが利用できる可能性がある HTTP/2 などのシナリオで役立ち、プロトコルの選択を高速化します。
ALPN はデフォルトで有効になっています。
無効にするには、次のように指定します。
quarkus.tls.alpn=false
quarkus.tls.alpn=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告ALPN を無効にすることは、エキスパート以外には推奨されません。特に HTTP/2 などのプロトコルで、パフォーマンスの低下、プロトコルネゴシエーションの問題、予期しない動作が発生する可能性があるためです。ただし、ALPN の無効化は、プロトコルネゴシエーションによって競合が発生する特殊なケースで、固有の不整合を診断したり、パフォーマンスをテストしたりするのに役立ちます。
1.3.3.5. 証明書失効リスト (CRL) リンクのコピーリンクがクリップボードにコピーされました!
証明書失効リスト (CRL) は、予定の有効期限より前に発行元の認証局 (CA) によって失効させられたデジタル証明書のリストです。証明書が侵害されたり、不要になったり、無効と判断されたりした場合、CA は証明書を CRL に追加して、その証明書を信頼しないよう証明書利用者に通知します。
CRL は、DER または PKCS#7 (P7B) フォーマットを使用して、信頼できなくなった証明書ファイルのリストで設定できます。
- DER フォーマットの場合、DER でエンコードされた CRL を渡します。
-
PKCS#7 フォーマットの場合、
SignedDataオブジェクトを渡します。この場合、重要なフィールドはcrlsだけです。
CRL を設定するには、次のように指定します。
quarkus.tls.certificate-revocation-list=ca.crl, ca2.crl
quarkus.tls.certificate-revocation-list=ca.crl, ca2.crl
1.3.3.6. すべての証明書とホスト名の検証を信頼する リンクのコピーリンクがクリップボードにコピーされました!
すべての証明書を信頼し、ホスト名の検証を無効にするように TLS 接続を設定できます。これらは 2 つの異なるプロセスであることに注意してください。
- すべての証明書を信頼すると、証明書の検証が無視されるため、すべての証明書が信頼されます。この方法は自己署名証明書を使用したテストには便利ですが、実稼働環境では使用しないでください。
- ホスト名の検証は、サーバーのアイデンティティーを検証するプロセスです。
これは中間者攻撃を防ぐのに役立ち、多くの場合、デフォルトで HTTPS または LDAPS に設定されます。
この 2 つのプロパティーは実稼働環境では使用しないでください。
すべての証明書を信頼するには、次のように指定します。
quarkus.tls.trust-all=true
quarkus.tls.trust-all=true
ホスト名の検証を無効にするには、次のように指定します。
quarkus.tls.hostname-verification-algorithm=NONE
quarkus.tls.hostname-verification-algorithm=NONE
1.3.4. 設定の参照 リンクのコピーリンクがクリップボードにコピーされました!
次の表に、サポートされているプロパティーを示します。
🔒 ビルド時に固定: 設定プロパティーはビルド時に固定されます。他のすべての設定プロパティーは実行時にオーバーライドできます。
| 設定プロパティー | 型 | デフォルト |
|
🔒 ビルド時に修正
Let’s Encrypt のサポートを有効にするには
環境変数: | boolean |
|
|
デフォルトでは、Quarkus は辞書順を使用して鍵をソートします。このプロパティーを使用すると、鍵/証明書ファイルの順序を指定できます。
環境変数: | list of string | |
|
キーストアファイルへのパス (P12/PFX フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
キーストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
キーストア内の秘密鍵と証明書のエイリアス。
環境変数: | string | |
|
キーストア内のエイリアスのパスワード。設定されていない場合、パスワードは認証情報プロバイダーから取得されます。
環境変数: | string | |
|
キーストアのプロバイダー。
環境変数: | string | |
|
キーストアファイルへのパス (JKS フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
キーストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
キーストア内の秘密鍵と証明書のエイリアス。
環境変数: | string | |
|
キーストア内のエイリアスのパスワード。設定されていない場合、パスワードを認証情報プロバイダーから取得できます。
環境変数: | string | |
|
キーストアのプロバイダー。
環境変数: | string | |
|
Server Name Indication (SNI) を有効にします。 Server Name Indication (SNI) は、TLS ハンドシェイク中にクライアントが接続を試みるホスト名を指定できるようにする TLS エクステンションです。これを使用すると、サーバーが単一の IP アドレス上の複数のドメインに対して異なる SSL 証明書を提示できるようになります。これにより、仮想ホスティングシナリオでセキュアな通信が容易になります。 この設定が有効な場合、クライアントは TLS ハンドシェイク中にサーバー名を示します。これにより、サーバーが適切な証明書を選択できるようになります。
PEM ファイルを使用してキーストアを設定する場合は、複数の CRT/鍵を指定する必要があります。JKS または P12 ファイルを使用してキーストアを設定する場合、SNI ホスト名に基づいて 1 つのエイリアスが選択されます。この場合、すべてのキーストアパスワードとエイリアスパスワードが同じである必要があります (
環境変数: | boolean |
|
|
認証情報プロバイダーは、キーストアのパスワードとエイリアスのパスワードを取得する方法として機能します。認証情報プロバイダーは、設定でパスワードが指定されていない場合にのみ使用されることに注意してください。
環境変数: | string | |
|
認証情報プロバイダーを提供する Bean の名前。
この名前は、使用する認証情報プロバイダーを選択するために使用されます。認証情報プロバイダーは CDI Bean として公開されている必要があります。また、選択されるように設定された名前に 設定されていない場合、デフォルトの認証情報プロバイダーが使用されます。
環境変数: | string | |
|
キーストアのパスワードを取得するために使用されるキー。 選択した認証情報プロバイダーがキーをサポートしていない場合、パスワードは取得されません。サポートしている場合、取得された値がキーストアを開くために使用されます。
環境変数: | string |
|
|
キーストアのエイリアスパスワードを取得するために使用されるキー。
選択した認証情報プロバイダーにキーが含まれていない場合、エイリアスパスワードは取得されません。含まれている場合、取得された値がキーストアからエイリアスの
環境変数: | string |
|
|
信頼済み証明書のパスのリスト (Pem フォーマット)。
環境変数: | list of path | |
|
トラストストアファイルへのパス (P12/PFX フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
トラストストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
トラストストアのエイリアス。
環境変数: | string | |
|
トラストストアのプロバイダー。
環境変数: | string | |
|
トラストストアファイルへのパス (JKS フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
トラストストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
トラストストア内の鍵のエイリアス。
環境変数: | string | |
|
トラストストアのプロバイダー。
環境変数: | string | |
|
認証情報プロバイダーは、キーストアのパスワードとエイリアスのパスワードを取得する方法として機能します。認証情報プロバイダーは、設定でパスワードが指定されていない場合にのみ使用されることに注意してください。
環境変数: | string | |
|
認証情報プロバイダーを提供する Bean の名前。
この名前は、使用する認証情報プロバイダーを選択するために使用されます。認証情報プロバイダーは CDI Bean として公開されている必要があります。また、選択されるように設定された名前に 設定されていない場合、デフォルトの認証情報プロバイダーが使用されます。
環境変数: | string | |
|
トラストストアのパスワードを取得するために使用されるキー。 選択した認証情報プロバイダーに設定されたキーが含まれていない場合、パスワードは取得されません。含まれている場合、取得された値がトラストストアを開くために使用されます。
環境変数: | string |
|
|
有効な暗号スイートの順序付きリストを設定します。何も指定されていない場合、組み込みの暗号の中から適切なデフォルトが選択されます。
スイートが設定されている場合、使用中の
環境変数: | list of string | |
|
有効な TLS プロトコルの順序付きリストを設定します。
設定されていない場合、デフォルトで 空のリストを設定して TLS を有効にすることは無効であることに注意してください。少なくとも 1 つのプロトコルが必要です。 また、このプロパティーを設定すると、デフォルトのプロトコルのリストが置き換えられます。
環境変数: | list of string |
|
|
TLS ハンドシェイクフェーズのタイムアウト。 設定されていない場合、デフォルトで 10 秒になります。
環境変数: |
| |
|
Application-Layer Protocol Negotiation (ALPN) を有効にします。 Application-Layer Protocol Negotiation は、TLS ハンドシェイク中にクライアントとサーバーが通信に使用するプロトコルをネゴシエートできるようにする TLS エクステンションです。ALPN は、TLS 接続を確立する前にクライアントが優先するアプリケーションプロトコルをサーバーに指示できるようにすることで、より効率的な通信を可能にします。これは、複数のプロトコルが利用できる可能性がある HTTP/2 などのシナリオで役立ち、プロトコルの選択を高速化します。
環境変数: | boolean |
|
|
失効した証明書 (ファイルへのパス) のリストを設定します。 証明書失効リスト (CRL) は、予定の有効期限より前に発行元の認証局 (CA) によって失効させられたデジタル証明書のリストです。証明書が侵害されたり、不要になったり、何らかの理由で無効と判断されたりした場合、CA は証明書を CRL に追加して、その証明書を信頼しないよう証明書利用者に通知します。
許可されるフォーマットは DER と PKCS#7 (P7B とも呼ばれます) の 2 つです。DER フォーマットを使用する場合は、DER でエンコードされた CRL を渡す必要があります。PKCS#7 フォーマットを使用する場合、PKCS#7
環境変数: | list of path | |
|
これはテストには便利ですが、実稼働環境では使用しないでください。
環境変数: | boolean |
|
|
サーバーのアイデンティティーをチェックする必要がある場合に使用するホスト名検証アルゴリズム。
設定されていない場合、設定されたエクステンションによって、使用するデフォルトのアルゴリズムが決定されます。たとえば、HTTP の場合は "HTTPS" になります。TCP の場合はプロトコルによって異なります。ただし、"HTTPS" または "LDAPS" に設定することを推奨します。
環境変数: | string | |
|
設定すると、サーバーが証明書を (たとえばファイルシステムから) 再読み込みし、再読み込みが成功した場合は
このプロパティーは、証明書を再読み込みする期間を設定します。設定されていない場合、証明書は自動的に再読み込みされません。ただし、その場合もアプリケーションは 起動されたイベントは、証明書が更新されたことをアプリケーションに通知し、実際の証明書の切り替えを続行するために使用されます。
環境変数: | ||
|
キーファイルへのパス (PEM フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
証明書ファイルへのパス (PEM フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
キーファイルへのパス (PEM フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
証明書ファイルへのパス (PEM フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
デフォルトでは、Quarkus は辞書順を使用して鍵をソートします。このプロパティーを使用すると、鍵/証明書ファイルの順序を指定できます。
環境変数: | list of string | |
|
キーストアファイルへのパス (P12/PFX フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
キーストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
キーストア内の秘密鍵と証明書のエイリアス。
環境変数: | string | |
|
キーストア内のエイリアスのパスワード。設定されていない場合、パスワードは認証情報プロバイダーから取得されます。
環境変数: | string | |
|
キーストアのプロバイダー。
環境変数: | string | |
|
キーストアファイルへのパス (JKS フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
キーストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
キーストア内の秘密鍵と証明書のエイリアス。
環境変数: | string | |
|
キーストア内のエイリアスのパスワード。設定されていない場合、パスワードを認証情報プロバイダーから取得できます。
環境変数: | string | |
|
キーストアのプロバイダー。
環境変数: | string | |
|
Server Name Indication (SNI) を有効にします。 Server Name Indication (SNI) は、TLS ハンドシェイク中にクライアントが接続を試みるホスト名を指定できるようにする TLS エクステンションです。これを使用すると、サーバーが単一の IP アドレス上の複数のドメインに対して異なる SSL 証明書を提示できるようになります。これにより、仮想ホスティングシナリオでセキュアな通信が容易になります。 この設定が有効な場合、クライアントは TLS ハンドシェイク中にサーバー名を示します。これにより、サーバーが適切な証明書を選択できるようになります。
PEM ファイルを使用してキーストアを設定する場合は、複数の CRT/鍵を指定する必要があります。JKS または P12 ファイルを使用してキーストアを設定する場合、SNI ホスト名に基づいて 1 つのエイリアスが選択されます。この場合、すべてのキーストアパスワードとエイリアスパスワードが同じである必要があります (
環境変数: | boolean |
|
|
認証情報プロバイダーは、キーストアのパスワードとエイリアスのパスワードを取得する方法として機能します。認証情報プロバイダーは、設定でパスワードが指定されていない場合にのみ使用されることに注意してください。
環境変数: | string | |
|
認証情報プロバイダーを提供する Bean の名前。
この名前は、使用する認証情報プロバイダーを選択するために使用されます。認証情報プロバイダーは CDI Bean として公開されている必要があります。また、選択されるように設定された名前に 設定されていない場合、デフォルトの認証情報プロバイダーが使用されます。
環境変数: | string | |
|
キーストアのパスワードを取得するために使用されるキー。 選択した認証情報プロバイダーがキーをサポートしていない場合、パスワードは取得されません。サポートしている場合、取得された値がキーストアを開くために使用されます。
環境変数: | string |
|
|
キーストアのエイリアスパスワードを取得するために使用されるキー。
選択した認証情報プロバイダーにキーが含まれていない場合、エイリアスパスワードは取得されません。含まれている場合、取得された値がキーストアからエイリアスの
環境変数: | string |
|
|
信頼済み証明書のパスのリスト (Pem フォーマット)。
環境変数: | list of path | |
|
トラストストアファイルへのパス (P12/PFX フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
トラストストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
トラストストアのエイリアス。
環境変数: | string | |
|
トラストストアのプロバイダー。
環境変数: | string | |
|
トラストストアファイルへのパス (JKS フォーマット)。
環境変数: | path | 必須 ⚠️ 必須 |
|
トラストストアのパスワード。設定されていない場合、認証情報プロバイダーからパスワードを取得する必要があります。
環境変数: | string | |
|
トラストストア内の鍵のエイリアス。
環境変数: | string | |
|
トラストストアのプロバイダー。
環境変数: | string | |
|
認証情報プロバイダーは、キーストアのパスワードとエイリアスのパスワードを取得する方法として機能します。認証情報プロバイダーは、設定でパスワードが指定されていない場合にのみ使用されることに注意してください。
環境変数: | string | |
|
認証情報プロバイダーを提供する Bean の名前。
この名前は、使用する認証情報プロバイダーを選択するために使用されます。認証情報プロバイダーは CDI Bean として公開されている必要があります。また、選択されるように設定された名前に 設定されていない場合、デフォルトの認証情報プロバイダーが使用されます。
環境変数: | string | |
|
トラストストアのパスワードを取得するために使用されるキー。 選択した認証情報プロバイダーに設定されたキーが含まれていない場合、パスワードは取得されません。含まれている場合、取得された値がトラストストアを開くために使用されます。
環境変数: | string |
|
|
有効な暗号スイートの順序付きリストを設定します。何も指定されていない場合、組み込みの暗号の中から適切なデフォルトが選択されます。
スイートが設定されている場合、使用中の
環境変数: | list of string | |
|
有効な TLS プロトコルの順序付きリストを設定します。
設定されていない場合、デフォルトで 空のリストを設定して TLS を有効にすることは無効であることに注意してください。少なくとも 1 つのプロトコルが必要です。 また、このプロパティーを設定すると、デフォルトのプロトコルのリストが置き換えられます。
環境変数: | list of string |
|
|
TLS ハンドシェイクフェーズのタイムアウト。 設定されていない場合、デフォルトで 10 秒になります。
環境変数: |
| |
|
Application-Layer Protocol Negotiation (ALPN) を有効にします。 Application-Layer Protocol Negotiation は、TLS ハンドシェイク中にクライアントとサーバーが通信に使用するプロトコルをネゴシエートできるようにする TLS エクステンションです。ALPN は、TLS 接続を確立する前にクライアントが優先するアプリケーションプロトコルをサーバーに指示できるようにすることで、より効率的な通信を可能にします。これは、複数のプロトコルが利用できる可能性がある HTTP/2 などのシナリオで役立ち、プロトコルの選択を高速化します。
環境変数: | boolean |
|
|
失効した証明書 (ファイルへのパス) のリストを設定します。 証明書失効リスト (CRL) は、予定の有効期限より前に発行元の認証局 (CA) によって失効させられたデジタル証明書のリストです。証明書が侵害されたり、不要になったり、何らかの理由で無効と判断されたりした場合、CA は証明書を CRL に追加して、その証明書を信頼しないよう証明書利用者に通知します。
許可されるフォーマットは DER と PKCS#7 (P7B とも呼ばれます) の 2 つです。DER フォーマットを使用する場合は、DER でエンコードされた CRL を渡す必要があります。PKCS#7 フォーマットを使用する場合、PKCS#7
環境変数: | list of path | |
|
これはテストには便利ですが、実稼働環境では使用しないでください。
環境変数: | boolean |
|
|
サーバーのアイデンティティーをチェックする必要がある場合に使用するホスト名検証アルゴリズム。
設定されていない場合、設定されたエクステンションによって、使用するデフォルトのアルゴリズムが決定されます。たとえば、HTTP の場合は "HTTPS" になります。TCP の場合はプロトコルによって異なります。ただし、"HTTPS" または "LDAPS" に設定することを推奨します。
環境変数: | string | |
|
設定すると、サーバーが証明書を (たとえばファイルシステムから) 再読み込みし、再読み込みが成功した場合は
このプロパティーは、証明書を再読み込みする期間を設定します。設定されていない場合、証明書は自動的に再読み込みされません。ただし、その場合もアプリケーションは 起動されたイベントは、証明書が更新されたことをアプリケーションに通知し、実際の証明書の切り替えを続行するために使用されます。
環境変数: |
duration の値を書き込むには、標準の java.time.Duration フォーマットを使用します。詳細は、Duration#parse() Java API ドキュメント を参照してください。
数字で始まる簡略化されたフォーマットも使用できます。
- 値が数値のみの場合は、秒単位の時間を表します。
-
数字の後に
msが続く値は、ミリ秒単位の時間を表します。
その他の場合は、解析のために簡略化されたフォーマットが java.time.Duration フォーマットに変換されます。
-
数字の後に
h、m、またはsが続く値には、接頭辞PTが付きます。 -
数字の後に
dが続く値は、接頭辞Pが付きます。
1.4. レジストリー API リンクのコピーリンクがクリップボードにコピーされました!
エクステンションは自動的に TLS レジストリーを使用します。一方、ユーザーはレジストリー API を介してプログラムで TLS 設定にアクセスすることもできます。
TLS 設定にアクセスするには、TlsConfigurationRegistry Bean を注入します。get ("<NAME>") を呼び出すことで名前付き TLS 設定を取得できます。また、getDefault() を呼び出すことでデフォルトの設定を取得できます。
TlsConfiguration オブジェクトには、キーストア、トラストストア、暗号スイート、プロトコル、およびその他のプロパティーが含まれています。また、このオブジェクトは設定から SSLContext を作成する方法を提供します。
また、TlsConfiguration オブジェクトを使用して、KeyCertOptions、TrustOptions などの Vert.x クライアントまたはサーバーを設定することもできます。
1.5. エクステンションからの証明書の登録 リンクのコピーリンクがクリップボードにコピーされました!
このセクションはエクステンション開発者専用です。エクステンションは、TLS レジストリーに証明書を登録できます。これは、エクステンションがアプリケーションに証明書を提供する必要がある場合、または異なるフォーマットを提供する場合に便利です。
エクステンションを使用して TLS レジストリーに証明書を登録するには、プロセッサー エクステンションで、名前と CertificateSupplier (証明書サプライヤー) で構成される TlsCertificateBuildItem を生成する必要があります。
TlsCertificateBuildItem item = new TlsCertificateBuildItem("named",
new MyCertificateSupplier());
TlsCertificateBuildItem item = new TlsCertificateBuildItem("named",
new MyCertificateSupplier());
証明書サプライヤーは、通常、レコーダーメソッドを使用して取得されるランタイムオブジェクトです。
証明書サプライヤーの例:
1.6. 起動時チェック リンクのコピーリンクがクリップボードにコピーされました!
TLS エクステンションを使用するアプリケーションが起動すると、TLS レジストリーは、設定が正しいことを確認するために、以下に示すいくつかのチェックを実行します。
- キーストアとトラストストアにアクセスできる。
- エイリアスがキーストアとトラストストアで使用可能であり、アクセスできる。
- 証明書が有効である。
- 暗号スイートとプロトコルが有効である。
- 証明書失効リスト (CRL) が有効である。
これらのチェックのいずれかが失敗すると、アプリケーションは起動しません。
1.7. 証明書の再読み込み リンクのコピーリンクがクリップボードにコピーされました!
TLSConfigurationRegistry から取得された TlsConfiguration には、証明書を再読み込みするためのメカニズムが含まれています。reload メソッドは、通常、ファイルシステムからキーストアとトラストストアを再読み込みして更新します。
再読み込み操作は自動ではなく、手動で実行する必要があります。さらに、TlsConfiguration 実装が再読み込みをサポートしている必要があります (証明書が設定されている場合)。
reload メソッドは、再読み込みが成功したかどうかを示す boolean を返します。true の値は、再読み込み操作が成功したことを意味し、必ずしも証明書が更新されたことを意味するわけではありません。
TlsConfiguration が再読み込みされた後、この設定を使用するサーバーとクライアントが、新しい証明書を適用するために特定の操作を実行する必要がある場合があります。
証明書の再読み込みについてクライアントとサーバーに通知する方法としては、io.quarkus.tls.CertificateUpdatedEvent タイプの CDI イベントを起動する方法が推奨されます。これを行うには、このタイプの CDI イベントを注入し、再読み込みが発生したときにそれを起動します。
-
手動で再読み込みをトリガーし、
CertificateUpdatedEventを起動します。
1.7.1. 定期的な再読み込み リンクのコピーリンクがクリップボードにコピーされました!
TLS レジストリーには、ファイルシステムの変更を定期的にチェックし、証明書を再読み込みするためのメカニズムが組み込まれています。reload-period プロパティーは、証明書を再読み込みする間隔を指定し、証明書が再読み込みされるたびに CertificateUpdatedEvent を発行します。
定期的な証明書の再読み込みを設定するには、次のように指定します。
quarkus.tls.reload-period=1h quarkus.tls.key-store.pem.0.cert=tls.crt quarkus.tls.key-store.pem.0.key=tls.key
quarkus.tls.reload-period=1h quarkus.tls.key-store.pem.0.cert=tls.crt quarkus.tls.key-store.pem.0.key=tls.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 名前付き設定ごとに、特定の再読み込み期間を設定できます。
quarkus.tls.http.reload-period=30min quarkus.tls.http.key-store.pem.0.cert=tls.crt quarkus.tls.http.key-store.pem.0.key=tls.key
quarkus.tls.http.reload-period=30min quarkus.tls.http.key-store.pem.0.cert=tls.crt quarkus.tls.http.key-store.pem.0.key=tls.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
影響を受けるサーバーおよびクライアントが、新しい証明書を適用するために CertificateUpdatedEvent を待ち受ける必要がある場合があります。これは、管理インターフェイスが有効な場合はそれも含めて、Quarkus HTTP サーバーに対して自動的に実行されます。
1.8. OpenShift 提供証明書の使用 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift でアプリケーションを実行する場合、OpenShift 提供証明書 を使用して TLS 証明書を自動的に生成および更新できます。Quarkus TLS レジストリーは、この証明書と認証局 (CA) ファイルを使用して、HTTPS トラフィックを処理し、証明書をセキュアに検証できます。
1.8.1. 証明書の取得 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift で提供証明書を生成するには、既存の Service オブジェクトにアノテーションを付けます。生成された証明書はシークレットに保存され、Pod にマウントできるようになります。
次のスニペットでは、TLS 証明書を生成するためのアノテーションが付いたサンプルの Service オブジェクトを使用しています。
Service オブジェクトの設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書を生成するには、すでに作成されている OpenShift
serviceに次のアノテーションを追加します。oc annotate service hero-service \ service.beta.openshift.io/serving-cert-secret-name=my-tls-secretoc annotate service hero-service \ service.beta.openshift.io/serving-cert-secret-name=my-tls-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow アノテーション
service.beta.openshift.io/serving-cert-secret-nameは、証明書を生成し、それをmy-tls-secretという名前のシークレットに保存するよう OpenShift に指示します。Deployment 設定を更新して、シークレットを Pod 内のボリュームとしてマウントします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift によって生成された証明書を使用するようにアプリケーションをデプロイします。これにより、HTTPS 経由でサービスが利用できるようになります。
quarkus.tls.key-store.pem.acme.cert および quarkus.tls.key-store.pem.acme.key 変数またはその環境変数バリアントを設定すると、TLS レジストリーがシークレットからの証明書と秘密鍵を使用します。
これにより、Quarkus HTTP サーバーのデフォルトのキーストアが設定され、サーバーが証明書を使用できるようになります。名前付き設定でこの証明書を使用する方法は、TLS 設定の参照 を参照してください。
1.8.2. 認証局 (CA) を信頼する リンクのコピーリンクがクリップボードにコピーされました!
前提条件
サービスが OpenShift によって発行された証明書を使用するようになったら、この証明書を信頼するようにクライアントアプリケーションを設定します。これを行うには、CA 証明書を保持する ConfigMap を作成し、それをマウントするように Pod を設定します。次の手順では、Quarkus REST クライアントを例として使用しますが、どのクライアントでも同じ方法が使用されます。
まず、CA 証明書を入力する 空 の ConfigMap を定義します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow service.beta.openshift.io/inject-cabundleアノテーションは、CA 証明書を ConfigMap に注入するために使用されます。この ConfigMap は、最初はデータがなく、空であることに注意してください。処理中に、OpenShift によって CA 証明書がservice-ca.crtファイルの ConfigMap に注入されます。ボリュームを追加して Deployment 設定にマウントすることで、ConfigMap をマウントします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この CA 証明書を使用するように REST クライアントを設定します。
次のような REST クライアントインターフェイスがあるとします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ベース URI と設定鍵を設定します。名前は
<service-name>.<namespace>.svcというフォーマットにする必要があります。そうしないと、証明書が信頼されません。configKeyも設定されていることを確認してください。
OpenShift によって生成された CA 証明書を信頼するように REST クライアントを設定します。
quarkus.rest-client.hero.tls-configuration-name=my-service-tls quarkus.tls.my-service-tls.trust-store.pem.certs=/deployments/tls/service-ca.crt
quarkus.rest-client.hero.tls-configuration-name=my-service-tls1 quarkus.tls.my-service-tls.trust-store.pem.certs=/deployments/tls/service-ca.crt2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.8.3. 証明書の更新 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift は生成した提供証明書を自動的に更新します。証明書が更新されると、シークレットが新しい証明書と秘密鍵で更新されます。
アプリケーションが新しい証明書を使用するようにするには、Quarkus TLS レジストリーの定期的な再読み込み機能を使用できます。
reload-period プロパティーを設定すると、TLS レジストリーはキーストアとトラストストアの変更を定期的にチェックし、必要に応じて再読み込みします。
quarkus.tls.reload-period=24h
quarkus.tls.reload-period=24h
- 必要に応じて、シークレットが更新されたときに証明書を再読み込みするカスタムメカニズムを実装します。詳細は、証明書の再読み込み を参照してください。
1.9. Quarkus CLI コマンドと開発用認証局 リンクのコピーリンクがクリップボードにコピーされました!
TLS レジストリーは、開発用認証局 (CA) と信頼済み証明書を生成するための Quarkus CLI コマンドを備えています。これにより、自己署名証明書をローカルで使用する必要がなくなります。
次のスニペットは、2 つのサブコマンドを含む quarkus tls コマンドの説明を示しています。
ほとんどの場合、Quarkus 開発用 CA を一度生成してから、この CA によって署名された証明書を生成します。Quarkus 開発用 CA は、ローカルで証明書に署名するために使用できる認証局です。この CA は開発を目的とする場合にのみ有効であり、ローカルマシン上でのみ信頼されます。生成された CA は $HOME/.quarkus/quarkus-dev-root-ca.pem に配置され、システムのトラストストアにインストールされます。
1.9.1. 自己署名証明書と CA 署名証明書の違いについて リンクのコピーリンクがクリップボードにコピーされました!
TLS を使用して開発する場合、次の 2 種類の証明書を使用できます。
- 自己署名証明書: この証明書は、それを使用する同じエンティティーによって署名されたものです。デフォルトでは信頼されません。このタイプの証明書は、通常、認証局 (CA) が利用できない場合や、簡単なセットアップが必要な場合に使用されます。実稼働環境には適しておらず、開発目的でのみ使用する必要があります。
- CA 署名証明書: この証明書は、信頼できるエンティティーである証明書 CA によって署名されたものです。この証明書はデフォルトで信頼されており、実稼働環境での標準的な選択肢です。
ローカル開発には自己署名証明書を使用できますが、制限があります。curl、wget、httpie などのブラウザーやツールは通常、自己署名証明書を信頼しないため、OS に CA を手動でインポートする必要があります。
この問題を回避するには、開発用 CA を使用して証明書に署名し、その CA をシステムのトラストストアにインストールします。これにより、システムが CA によって署名されたすべての証明書を信頼するようになります。
Quarkus は、開発用 CA とこの CA によって署名される証明書の生成を簡素化します。
1.9.2. 開発用 CA の生成 リンクのコピーリンクがクリップボードにコピーされました!
開発用 CA は、ローカルで証明書に署名するために使用できる認証局です。生成された CA は開発を目的とする場合にのみ有効であり、ローカルマシン上でのみ信頼されることに注意してください。
開発用 CA を生成するには、次のように指定します。
quarkus tls generate-quarkus-ca --install \
--renew \
--truststore
quarkus tls generate-quarkus-ca --install \
--renew \
--truststore
- 1
--installは、CA をシステムのトラストストアにインストールします。Windows、Mac、Linux (Fedora および Ubuntu) がサポートされています。ただし、ブラウザーによっては、生成された CA を手動でインポートする必要がある場合があります。詳細は、ブラウザーのドキュメントを参照してください。生成された CA は$HOME/.quarkus/quarkus-dev-root-ca.pemに配置されます。- 2
--renewは、CA がすでに存在する場合に CA を更新します。このオプションを使用すると、秘密鍵が変更されます。そのため、CA によって署名された証明書を再生成する必要があります。CA の有効期限が切れた場合は、自動的に更新されます。--renewオプションは必要ありません。- 3
--truststoreは、CA 証明書を含む PKCS12 トラストストアも生成します。
証明書をインストールするときに、システムのトラストストアに証明書をインストールするためのパスワードの入力を求められたり、Windows のダイアログで確認を求められたりすることがあります。
Windows では、管理者権限を持つターミナルから管理者として実行し、システムのトラストストアに CA をインストールしてください。
1.9.3. 信頼済み (署名済み) 証明書の生成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
Quarkus 開発用 CA をインストールしたら、信頼済み証明書を生成します。この証明書は Quarkus 開発用 CA によって署名され、システムによって信頼されます。
quarkus tls generate-certificate --name my-cert
quarkus tls generate-certificate --name my-certCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、Quarkus 開発用 CA によって署名された証明書を生成します。開発用 CA は、適切にインストールまたはインポートされた場合にシステムによって信頼されます。
証明書は
./.certs/に保存されます。次の 2 つのファイルが生成されます。
-
$NAME-keystore.p12: 秘密鍵と証明書が含まれています。パスワードで保護されています。 $NAME-truststore.p12: テスト用などにトラストストアとして使用できる CA 証明書が含まれています。以下に示すその他のオプションも利用できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書を生成するときに
.envファイルも生成されます。これにより、Quarkus 開発モードがこれらの証明書を認識するようになります。アプリケーションを開発モードで実行して、これらの証明書を使用します。
./mvnw quarkus:dev ... INFO [io.quarkus] (Quarkus Main Thread) demo 1.0.0-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 1.286s. Listening on: http://localhost:8080 and https://localhost:8443
./mvnw quarkus:dev ... INFO [io.quarkus] (Quarkus Main Thread) demo 1.0.0-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 1.286s. Listening on: http://localhost:8080 and https://localhost:8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTPS (
https://localhost:8443/q/dev) を使用するか、curlリクエストを発行して Dev UI を開きます。curl https://localhost:8443/hello Hello from Quarkus REST%
curl https://localhost:8443/hello Hello from Quarkus REST%Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Quarkus 開発用 CA がインストールされていない場合、Quarkus は自己署名証明書を生成します。
1.9.4. 自己署名証明書の生成 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus 開発用 CA がインストールされている場合でも、自己署名証明書を生成できます。
quarkus tls generate-certificate --name my-cert --self-signed
quarkus tls generate-certificate --name my-cert --self-signed
これにより、Quarkus 開発用 CA によって署名されない自己署名証明書が生成されます。
1.9.5. Quarkus 開発用 CA のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
システムから Quarkus 開発用 CA をアンインストールする方法は、OS によって異なります。
1.9.5.1. Windows で CA 証明書を削除する リンクのコピーリンクがクリップボードにコピーされました!
管理者権限で Powershell ターミナルを使用して、Windows 上の CA 証明書をリスト表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存されている CA 証明書を削除します。
$Serial_Numberを CA 証明書のシリアル番号に置き換えます。> certutil -delstore -user -v Root $Serial_Number
> certutil -delstore -user -v Root $Serial_NumberCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.9.5.2. Linux で CA 証明書を削除する リンクのコピーリンクがクリップボードにコピーされました!
Fedora の場合:
sudo rm /etc/pki/ca-trust/source/anchors/quarkus-dev-root-ca.pem sudo update-ca-trust
sudo rm /etc/pki/ca-trust/source/anchors/quarkus-dev-root-ca.pem sudo update-ca-trustCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ubuntu の場合:
sudo rm /usr/local/share/ca-certificates/quarkus-dev-root-ca.pem sudo update-ca-certificates
sudo rm /usr/local/share/ca-certificates/quarkus-dev-root-ca.pem sudo update-ca-certificatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.9.5.3. Mac で CA 証明書を削除する リンクのコピーリンクがクリップボードにコピーされました!
Mac の場合:
sudo security -v remove-trusted-cert -d /Users/clement/.quarkus/quarkus-dev-root-ca.pem
sudo security -v remove-trusted-cert -d /Users/clement/.quarkus/quarkus-dev-root-ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow