8.7. クライアント証明書ルックアップを有効にする
プロキシーが TLS Termination プロキシーとして設定されている場合、クライアント証明書情報は特定の HTTP 要求ヘッダーを通じてサーバーに転送され、クライアントの認証に使用されます。使用しているプロキシーに応じて、サーバーがクライアント証明書情報を取得する方法を設定できます。
X.509 認証のプロキシーヘッダーを介したクライアント証明書の検索は、セキュリティー上重要であると考えられます。誤って設定された場合、偽造されたクライアント証明書ヘッダーが認証に使用される可能性があります。プロキシーヘッダー経由で渡されるクライアント証明書情報が信頼できることを確認するために、特別な予防措置を講じる必要があります。
- ユースケースで再暗号化またはエッジ TLS Termination が必要かどうかを再確認してください。これは、クライアント証明書の検索にプロキシーヘッダーを使用することを意味します。X.509 認証が必要な場合は、プロキシーヘッダー経由で証明書を渡す必要がない TLS パススルーが、より安全なオプションとして推奨されます。プロキシーヘッダーからのクライアント証明書の検索は、再暗号化とエッジ TLS Termination にのみ適用されます。
パススルーが選択できない場合は、次のセキュリティー対策を実装してください。
- Red Hat build of Keycloak が分離され、プロキシーからの接続のみを受け入れるようにネットワークを設定します。
-
プロキシーが、
spi-x509cert-lookup-<provider>-ssl-client-cert
オプションで設定されているヘッダーを必ず上書きするようにします。 -
いずれの
spi-x509cert-*
オプションもproxy-trusted-addresses
オプションを反映しないことに注意してください。 -
spi-x509cert-lookup-<provider>-trust-proxy-verification
の設定には、特に注意してください。プロキシーが必ずクライアント証明書を検証すると信頼できる場合にのみ、これを有効にしてください。プロキシーがクライアント証明書チェーンを検証せずにspi-x509cert-lookup-<provider>-trust-proxy-verification=true
を設定すると、Red Hat build of Keycloak が偽造されたクライアント証明書が認証に使用できるという脆弱性に Red Hat build of Keycloak がさらされることになります。
サーバーは、次のような最も一般的な TLS Termination プロキシーのいくつかをサポートしています。
Proxy | Provider |
---|---|
Apache HTTP サーバー | apache |
HAProxy | haproxy |
NGINX | nginx |
要求からクライアント証明書を取得する方法を設定するには、以下を実行する必要があります。
対応するプロキシープロバイダーを有効にする
bin/kc.[sh|bat] build --spi-x509cert-lookup-provider=<provider>
HTTP ヘッダーを設定する
bin/kc.[sh|bat] start --spi-x509cert-lookup-<provider>-ssl-client-cert=SSL_CLIENT_CERT --spi-x509cert-lookup-<provider>-ssl-cert-chain-prefix=CERT_CHAIN --spi-x509cert-lookup-<provider>-certificate-chain-length=10
HTTP ヘッダーを設定する際には、使用している値が、プロキシーによってクライアント証明書情報とともに転送されるヘッダーの名前に対応していることを確認する必要があります。
プロバイダーの設定に使用できるオプションは次のとおりです。
オプション | 説明 |
---|---|
ssl-client-cert | クライアント証明書を保持するヘッダーの名前 |
ssl-cert-chain-prefix |
チェーン内の追加の証明書を保持するヘッダーの接頭辞。チェーンの長さに応じて個々の証明書を取得するために使用されます。たとえば |
certificate-chain-length | 証明書チェーンの最大長。 |
trust-proxy-verification | 証明書を Red Hat build of Keycloak に転送して Red Hat build of Keycloak で検証するのではなく、信頼している NGINX プロキシー証明書の検証を有効にします。 |
8.7.1. NGINX プロバイダーを設定する
NGINX SSL/TLS モジュールは、クライアント証明書チェーンを公開しません。Red Hat build of Keycloak の NGINX 証明書ルックアッププロバイダーは、Red Hat build of Keycloak トラストストアを使用してそれを再構築します。
このプロバイダーを使用している場合は、Red Hat build of Keycloak トラストストアを設定する方法について、信頼済み証明書の設定 を参照してください。