8.5. 送信 HTTP 要求
Red Hat Single Sign-On サーバーは、それが保護するサービスやアプリケーションに対してブラウザーのものではない HTTP 要求を送信する必要があります。認証サーバーは、HTTP クライアント接続プールを維持し、これらの発信接続を管理します。standalone.xml、standalone-ha.xml、または domain.xml で設定する必要がある設定があります。このファイルの場所は、操作モード によって異なります。
HTTP クライアント設定例
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property name="connection-pool-size" value="256"/>
</properties>
</provider>
</spi>
可能な設定オプションは以下のとおりです。
- establish-connection-timeout-millis
- ソケット接続の確立のタイムアウト。
- socket-timeout-millis
- 発信リクエストがこの期間のデータを受信しない場合は、接続をタイムアウトします。
- connection-pool-size
- プールで使用できる接続数 (デフォルトは 128)。
- max-pooled-per-route
- ホストごとにプールできる接続の数 (デフォルトでは 64)。
- connection-ttl-millis
- 最大接続時間 (ミリ秒単位)。デフォルトでは設定されません。
- max-connection-idle-time-millis
-
接続プールで接続がアイドル状態でいられる最大期間 (デフォルトでは 900 秒)。Apache HTTP クライアントのバックグラウンドクリーナースレッドを開始します。このチェックとバックグラウンドスレッドを無効にするには、
-1に設定します。 - disable-cookies
-
デフォルトは
trueです。true に設定すると、クッキーキャッシングは無効になります。 - client-keystore
- これは、Java キーストアファイルへのパスです。このキーストアには双方向 SSL のクライアント証明書が含まれます。
- client-keystore-password
-
クライアントキーストアのパスワード。これは、
client-keystoreが設定されている場合は 必須 になります。 - client-key-password
-
クライアントのキーのパスワードこれは、
client-keystoreが設定されている場合は REQUIRED になります。 - proxy-mappings
- 送信 HTTP 要求のプロキシー設定を示します。詳細は、HTTP リクエストの送信のプロキシーマッピング のセクションを参照してください。
- disable-trust-manager
-
発信要求に HTTPS が必要で、この設定オプションが
trueに設定されている場合は、トラストストアを指定する必要がありません。この設定は開発時のみ使用してください。これは SSL 証明書の検証を無効にするため、実稼働環境では 使用しないで ください。これは 任意 です。デフォルト値はfalseです。
8.5.1. HTTP 要求の送信プロキシーマッピング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On によって送信される送信 HTTP 要求は、任意でプロキシーマッピングのコンマ区切りリストに基づいてプロキシーサーバーを使用できます。プロキシーマッピングは、hostnamePattern;proxyUri の形式で、正規表現ベースのホスト名パターンとプロキシー URI の組み合わせを示します。以下に例を示します。
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
送信 HTTP リクエストのプロキシーを決定するには、ターゲットのホスト名が、設定されたホスト名パターンと照合されます。最初のマッチングパターンは、使用する proxy-uri を決定します。指定のホスト名に対して設定されたパターンのいずれも一致しない場合は、プロキシーは使用されません。
プロキシーサーバーに認証が必要な場合は、username:password@ 形式でプロキシーユーザーの認証情報を含めます。以下は例になります。
.*\.(google|googleapis)\.com;http://user01:pas2w0rd@www-proxy.acme.com:8080
proxy-uri の特別な値 NO_PROXY は、関連付けられたホスト名パターンに一致するホストにプロキシーを使用すべきではないことを示すために使用できます。proxy-mappings の最後に catch-all パターンを指定して、すべての送信リクエストにデフォルトのプロキシーを定義することができます。
proxy-mapping の設定の例を以下に示します。
# All requests to Google APIs should use http://www-proxy.acme.com:8080 as proxy
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
# All requests to internal systems should use no proxy
.*\.acme\.com;NO_PROXY
# All other requests should use http://fallback:8080 as proxy
.*;http://fallback:8080
これは、以下の jboss-cli コマンドで設定できます。以下のように regex-pattern を適切にエスケープする必要があります。
echo SETUP: Configure proxy routes for HttpClient SPI
# In case there is no connectionsHttpClient definition yet
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:add(enabled=true)
# Configure the proxy-mappings
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:write-attribute(name=properties.proxy-mappings,value=[".*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080",".*\\.acme\\.com;NO_PROXY",".*;http://fallback:8080"])
jboss-cli コマンドを実行すると、以下のサブシステムが設定されます。" で " 文字をエンコードする必要があることに注意してください。
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property
name="proxy-mappings"
value="[".*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080",".*\\.acme\\.com;NO_PROXY",".*;http://fallback:8080"]"/>
</properties>
</provider>
</spi>
8.5.2. 標準の環境変数の使用 リンクのコピーリンクがクリップボードにコピーされました!
または、標準の環境変数を使用して、プロキシーマッピング (HTTP_PROXY、HTTPS_PROXY、および NO_PROXY 変数) を設定できます。
HTTP_PROXY および HTTPS_PROXY 変数は、すべての送信 HTTP 要求に使用されるプロキシーサーバーを表します。Red Hat Single Sign-On は、この 2 つの変数とは変わりません。両方が指定されている場合には、HTTPS_PROXY はプロキシーサーバーが使用する実際のスキームに関係なく優先されます。
NO_PROXY 変数は、プロキシーを使用しないホスト名のコンマ区切りリストを定義するために使用されます。ホスト名が指定されている場合、その接頭辞 (subdomains) もプロキシーの使用から除外されます。
以下の例を参照してください。
HTTPS_PROXY=https://www-proxy.acme.com:8080
NO_PROXY=google.com,login.facebook.com
この例では、すべての送信 HTTP リクエストは、login.google.com、google.com、auth.login.facebook.com などのリクエストを除き、https://www-proxy.acme.com:8080 プロキシーサーバーを使用します。たとえば、groups.facebook.com はプロキシー経由でルーティングされます。
環境変数は小文字または大文字にすることができます。小文字が優先されます。たとえば、HTTP_PROXY と http_proxy の両方が定義されている場合、http_proxy が使用されます。
(上記のように) プロキシーマッピングがサブシステム設定を使用して定義される場合に、Red Hat Single Sign-On では環境変数は考慮されません。HTTP_PROXY 環境変数が定義されていても、プロキシーサーバーを使用しない場合は、このシナリオが適用されます。これを実行するには、以下のように汎用のプロキシールートを指定します。
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property name="proxy-mappings" value=".*;NO_PROXY"/>
</properties>
</provider>
</spi>
8.5.3. 送信 HTTPS リクエストトラストストア リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On がリモート HTTPS エンドポイントで呼び出される場合、信頼できるサーバーに接続するためにリモートサーバーの証明書を検証する必要があります。これは、中間者攻撃を防ぐために必要です。これらの証明書を署名したこれらのリモートサーバーまたは CA の証明書はトラストストアに配置する必要があります。このトラストストアは、Red Hat Single Sign-On サーバーによって管理されます。
トラストストアの設定は、常に Red Hat Single Sign-On トラストストア SPI によって行われます。このセクションの手順は、キーストアが JBoss Security Legacy または Elytron TLS によって設定された場合に適用されます。
トラストストアは、アイデンティティーブローカー、LDAP アイデンティティープロバイダーに安全を接続する際に使用され、電子メールの送信時やクライアントアプリケーションとのバックチャネル通信に使用されます。
デフォルトでは、トラストストアプロバイダーは設定されず、https 接続は Java の JSSE リファレンスガイド で説明されているように、標準の Java トラストストア設定にフォールバックします。信頼が確立されていない場合、これらの発信 HTTPS リクエストは失敗します。
keytool を使用して新しいトラストストアファイルを作成したり、信頼されるホスト証明書を既存のホスト証明書に追加したりできます。
$ keytool -import -alias HOSTDOMAIN -keystore truststore.jks -file host-certificate.cer
トラストストアは、ディストリビューションの standalone.xml ファイル、standalone-ha.xml ファイル、または domain.xml ファイル内で設定されます。このファイルの場所は、操作モード によって異なります。以下のテンプレートを使用して、トラストストア設定を追加できます。
<spi name="truststore">
<provider name="file" enabled="true">
<properties>
<property name="file" value="path to your .jks file containing public certificates"/>
<property name="password" value="password"/>
<property name="hostname-verification-policy" value="WILDCARD"/>
</properties>
</provider>
</spi>
この設定の可能な設定オプションは以下のとおりです。
- file
- Java キーストアファイルへのパス。HTTPS 要求は、通信しているサーバーのホストを確認する方法が必要です。これは、トラストストアが行なうことです。キーストアには、1 つ以上の信頼できるホスト証明書または認証局が含まれます。このトラストストアファイルには、セキュアなホストのパブリック証明書のみを含める必要があります。これは、上記のプロパティーのいずれかが定義されている場合には 必須 です。
- password
- KeyStore のパスワード。これは、上記のプロパティーのいずれかが定義されている場合には 必須 です。
- hostname-verification-policy
-
デフォルト では
WILDCARDです。HTTPS 要求の場合、これによりサーバーの証明書のホスト名が検証されます。ANYは、ホスト名が検証されていないことを意味します。WILDCARD*.foo.com などのサブドメイン名のワイルドカードを許可します。STRICTCN はホスト名に完全に一致する必要があります。