8.5.6. クライアント証明書ルックアップ

Red Hat Single Sign-On サーバーが直接 HTTP リクエストを受け取ると、JBoss EAP undertow サブシステムは SSL ハンドシェイクを確立し、クライアント証明書を抽出します。JBoss EAP は、サーブレット仕様で指定されたように、HTTP リクエストの javax.servlet.request.X509Certificate 属性にクライアント証明書を保存します。Red Hat Single Sign-On X509 オーセンティケーターは、この属性から証明書を検索できます。

ただし、Red Hat Single Sign-On サーバーがロードバランサーまたはリバースプロキシーの背後で HTTP リクエストをリッスンする場合は、プロキシーサーバーはクライアント証明書を抽出し、相互 SSL 接続を確立する場合があります。リバースプロキシーは通常、認証されたクライアント証明書をベースのリクエストの HTTP ヘッダーに配置します。プロキシーはリクエストをバックエンド Red Hat Single Sign-On サーバーに転送します。この場合、Red Hat Single Sign-On は、HTTP リクエストの属性ではなく、HTTP ヘッダーから X.509 証明書チェーンを検索する必要があります。

Red Hat Single Sign-On がリバースプロキシーの背後にある場合は、通常 RHSSO_HOME/standalone/configuration/standalone.xml で x509cert-lookup SPI の代替プロバイダーを設定する必要があります。HTTP ヘッダー証明書を検索する default のプロバイダーでは、さらに haproxyapache の 2 つの組み込みプロバイダーが存在します。

8.5.6.1. HAProxy 証明書ルックアッププロバイダー

Red Hat Single Sign-On サーバーが HAProxy リバースプロキシーの背後に配置されると、このプロバイダーを使用します。サーバーには以下の設定を使用します。

<spi name="x509cert-lookup">
    <default-provider>haproxy</default-provider>
    <provider name="haproxy" enabled="true">
        <properties>
            <property name="sslClientCert" value="SSL_CLIENT_CERT"/>
            <property name="sslCertChainPrefix" value="CERT_CHAIN"/>
            <property name="certificateChainLength" value="10"/>
        </properties>
    </provider>
</spi>

この設定例では、クライアント証明書が HTTP ヘッダー SSL_CLIENT_CERT から検索され、そのチェーンからの他の証明書が CERT_CHAIN_0 から CERT_CHAIN_9 までの HTTP ヘッダーから検索されます。属性 certificateChainLength はチェーンの最大長であるため、最後の属性は CERT_CHAIN_9 になります。

クライアント証明書の HTTP ヘッダーおよびクライアント証明書チェーンの設定についての詳細は、HAProxy のドキュメントを参照してください。