TLS設定

Keycloakの受信および送信リクエスト用のHTTPS証明書を設定する方法について説明します。

Transport Layer Security(略称:TLS)は、安全なチャネルを介してデータを交換するために不可欠です。本番環境では、KeycloakエンドポイントをHTTP経由で公開しないでください。機密データは、Keycloakが他のアプリケーションと交換するものの核心部分であるためです。このガイドでは、HTTPS/TLSを使用するようにKeycloakを設定する方法を学習します。

Keycloakは、PEM形式のファイルまたはJavaキーストアから必要な証明書インフラストラクチャをロードするように設定できます。両方の方法が設定されている場合、PEMファイルがJavaキーストアよりも優先されます。

PEM形式で証明書を提供する

一致する証明書と秘密鍵ファイルのペアをPEM形式で使用する場合、次のコマンドを実行してそれらを使用するようにKeycloakを設定します。

bin/kc.[sh|bat] start --https-certificate-file=/path/to/certfile.pem --https-certificate-key-file=/path/to/keyfile.pem

Keycloakは、これらのファイルからインメモリキーストアを作成し、その後このキーストアを使用します。

キーストアを提供する

キーストアファイルが明示的に設定されておらず、http-enabledがfalseに設定されている場合、Keycloakはconf/server.keystoreファイルを探します。

代替として、次のコマンドを実行して既存のキーストアを使用できます。

bin/kc.[sh|bat] start --https-key-store-file=/path/to/existing-keystore-file

キーストアの認識されるファイル拡張子

  • pkcs12ファイルの場合は、.p12.pkcs12、および.pfx

  • jksファイルの場合は、.jksおよび.keystore

  • pemファイルの場合は、.key.crt、および.pem

キーストアの拡張子がファイルタイプと一致しない場合は、https-key-store-typeオプションも設定する必要があります。

キーストアパスワードの設定

https-key-store-passwordオプションを使用して、キーストアの安全なパスワードを設定できます。

bin/kc.[sh|bat] start --https-key-store-password=<value>

パスワードが設定されていない場合、デフォルトのパスワードpasswordが使用されます。

認証情報の保護

CLIを使用するか、conf/keycloak.confファイルに追加して、パスワードをプレーンテキストで設定することを避けてください。代わりに、Vault/マウントされたシークレットを使用するなど、適切なプラクティスを使用してください。詳細については、Vaultの使用および本番環境向けKeycloakの設定を参照してください。

TLSプロトコルの設定

デフォルトでは、Keycloakは非推奨のTLSプロトコルを有効にしません。クライアントが非推奨のプロトコルのみをサポートしている場合は、クライアントのアップグレードを検討してください。ただし、一時的な回避策として、次のコマンドを実行して非推奨のプロトコルを有効にできます。

bin/kc.[sh|bat] start --https-protocols=<protocol>[,<protocol>]

TLSv1.2も許可するには、次のようなコマンドを使用します:kc.sh start --https-protocols=TLSv1.3,TLSv1.2

HTTPSポートの切り替え

Keycloakはポート8443でHTTPSトラフィックをリッスンします。このポートを変更するには、次のコマンドを使用します。

bin/kc.[sh|bat] start --https-port=<port>

証明書とキーの再読み込み

デフォルトでは、Keycloakはhttps-*オプションで指定された証明書、キー、およびキーストアを1時間ごとに再読み込みします。サーバーキーを頻繁にローテーションする必要がある環境では、サーバーを再起動せずにこれを実行できます。https-certificates-reload-periodオプションを使用して、デフォルトをオーバーライドできます。https-*オプションで参照されるキーストア、トラストストア、および証明書ファイルを再読み込みする間隔。値は、java.time.Duration値、秒単位の整数、または時間単位[mshmsd]が続く整数にすることができます。30秒より大きくする必要があります。無効にするには-1を使用します。

関連オプション

http-enabled

HTTPリスナーを有効にします。

開発モードではデフォルトで有効になっています。サーバーがTLS終端プロキシによってフロントエンドされていない限り、通常は本番環境では有効になっていません。

CLI: --http-enabled
Env: KC_HTTP_ENABLED

truefalse(デフォルト)

https-certificate-file

PEM形式のサーバー証明書または証明書チェーンへのファイルパス。

CLI: --https-certificate-file
Env: KC_HTTPS_CERTIFICATE_FILE

https-certificate-key-file

PEM形式の秘密鍵へのファイルパス。

CLI: --https-certificate-key-file
Env: KC_HTTPS_CERTIFICATE_KEY_FILE

https-certificates-reload-period

https-*オプションで参照されるキーストア、トラストストア、および証明書ファイルを再読み込みする間隔。

java.time.Duration値、秒単位の整数、または[ms、h、m、s、d]のいずれかが続く整数にすることができます。30秒より大きくする必要があります。無効にするには-1を使用します。

CLI: --https-certificates-reload-period
Env: KC_HTTPS_CERTIFICATES_RELOAD_PERIOD

1h(デフォルト)

https-cipher-suites

使用する暗号スイート。

指定がない場合、適切なデフォルトが選択されます。

CLI: --https-cipher-suites
Env: KC_HTTPS_CIPHER_SUITES

https-key-store-file

個別のファイルを指定する代わりに、証明書情報を保持するキーストア。

CLI: --https-key-store-file
Env: KC_HTTPS_KEY_STORE_FILE

https-key-store-password

キーストアファイルのパスワード。

CLI: --https-key-store-password
Env: KC_HTTPS_KEY_STORE_PASSWORD

password(デフォルト)

https-key-store-type

キーストアファイルのタイプ。

指定されていない場合、タイプはファイル拡張子に基づいて自動的に検出されます。fips-modestrictに設定されており、値が設定されていない場合、デフォルトはBCFKSになります。

CLI: --https-key-store-type
Env: KC_HTTPS_KEY_STORE_TYPE

https-port

使用されるHTTPSポート。

CLI: --https-port
Env: KC_HTTPS_PORT

8443(デフォルト)

https-protocols

明示的に有効にするプロトコルのリスト。

CLI: --https-protocols
Env: KC_HTTPS_PROTOCOLS

[TLSv1.3,TLSv1.2](デフォルト)

管理サーバー

https-management-certificate-file

管理サーバー用のPEM形式のサーバー証明書または証明書チェーンへのファイルパス。

指定されていない場合、値はHTTPオプションから継承されます。管理インターフェースで何かを公開する場合にのみ関連します - 詳細についてはガイドを参照してください。

CLI: --https-management-certificate-file
Env: KC_HTTPS_MANAGEMENT_CERTIFICATE_FILE

https-management-certificate-key-file

管理サーバー用のPEM形式の秘密鍵へのファイルパス。

指定されていない場合、値はHTTPオプションから継承されます。管理インターフェースで何かを公開する場合にのみ関連します - 詳細についてはガイドを参照してください。

CLI: --https-management-certificate-key-file
Env: KC_HTTPS_MANAGEMENT_CERTIFICATE_KEY_FILE

https-management-certificates-reload-period

管理サーバーのhttps-management-*オプションで参照されるキーストア、トラストストア、および証明書ファイルを再読み込みする間隔。

java.time.Duration値、秒単位の整数、または[ms、h、m、s、d]のいずれかが続く整数にすることができます。30秒より大きくする必要があります。無効にするには-1を使用します。指定されていない場合、値はHTTPオプションから継承されます。管理インターフェースで何かを公開する場合にのみ関連します - 詳細についてはガイドを参照してください。

CLI: --https-management-certificates-reload-period
Env: KC_HTTPS_MANAGEMENT_CERTIFICATES_RELOAD_PERIOD

1h(デフォルト)

https-management-key-store-file

管理サーバーの個別のファイルを指定する代わりに、証明書情報を保持するキーストア。

指定されていない場合、値はHTTPオプションから継承されます。管理インターフェースで何かを公開する場合にのみ関連します - 詳細についてはガイドを参照してください。

CLI: --https-management-key-store-file
Env: KC_HTTPS_MANAGEMENT_KEY_STORE_FILE

https-management-key-store-password

管理サーバーのキーストアファイルのパスワード。

指定されていない場合、値はHTTPオプションから継承されます。管理インターフェースで何かを公開する場合にのみ関連します - 詳細についてはガイドを参照してください。

CLI: --https-management-key-store-password
Env: KC_HTTPS_MANAGEMENT_KEY_STORE_PASSWORD

password(デフォルト)

このページについて