7.4. 送信 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 リクエストの送信のプロキシーマッピング のセクションを参照してください。
7.4.1. HTTP 要求の送信プロキシーマッピング
Red Hat Single Sign-On によって送信される送信 HTTP 要求は、任意でプロキシーマッピングのコンマ区切りリストに基づいてプロキシーサーバーを使用できます。プロキシーマッピングは、hostnamePattern;proxyUri
の形式で、正規表現ベースのホスト名パターンとプロキシー URI の組み合わせを示します。以下に例を示します。
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
送信 HTTP リクエストのプロキシーを決定するには、ターゲットのホスト名が、設定されたホスト名パターンと照合されます。最初のマッチングパターンは、使用する proxy-uri を決定します。指定のホスト名に対して設定されたパターンのいずれも一致しない場合は、プロキシーは使用されません。
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>
7.4.2. 送信 HTTPS リクエストトラストストア
Red Hat Single Sign-On がリモート HTTPS エンドポイントで呼び出される場合、信頼できるサーバーに接続するためにリモートサーバーの証明書を検証する必要があります。これは、中間者攻撃を防ぐために必要です。これらの証明書を署名したこれらのリモートサーバーまたは CA の証明書はトラストストアに配置する必要があります。このトラストストアは、Red Hat Single Sign-On サーバーによって管理されます。
トラストストアは、アイデンティティーブローカー、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"/> <property name="disabled" value="false"/> </properties> </provider> </spi>
この設定の可能な設定オプションは以下のとおりです。
- file
-
Java キーストアファイルへのパス。HTTPS 要求は、通信しているサーバーのホストを確認する方法が必要です。これは、トラストストアが行なうことです。キーストアには、1 つ以上の信頼できるホスト証明書または認証局が含まれます。このトラストストアファイルには、セキュアなホストのパブリック証明書のみを含める必要があります。これは、
disabled
が true の場合に REQUIRED になります。 - password
-
トラストストアのパスワード。これは、
disabled
が true の場合に REQUIRED になります。 - hostname-verification-policy
-
デフォルト では
WILDCARD
です。HTTPS 要求の場合、これによりサーバーの証明書のホスト名が検証されます。ANY
は、ホスト名が検証されていないことを意味します。WILDCARD
*.foo.com などのサブドメイン名のワイルドカードを許可します。STRICT
CN はホスト名に完全に一致する必要があります。 - disabled
-
true (デフォルト値) の場合、トラストストア設定は無視され、証明書のチェックは JSSE 設定にフォールバックします。false に設定した場合、トラストストアの
ファイル
およびパスワード
を設定する必要があります。