7.4. 传出 HTTP 请求
Red Hat Single Sign-On 服务器通常需要对安全的应用程序和服务进行非浏览器 HTTP 请求。auth 服务器通过维护 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 时,这将禁用任何 Cookie 缓存。 - client-keystore
- 这是 Java 密钥存储文件的文件路径。此密钥存储包含双向 SSL 的客户端证书。
- client-keystore-password
-
客户端密钥存储的密码。如果设置了
client-keystore
,则这是 REQUIRED。 - client-key-password
-
客户端密钥的密码。如果设置了
client-keystore
,则这是 REQUIRED。 - proxy-mappings
- Dennotes 出站 HTTP 请求的代理配置。如需了解更多详细信息,请参阅有关 Proxy Mappings for Outgoing HTTP Requests 部分。
7.4.1. 传出 HTTP 请求的代理映射
Red Hat Single Sign-On 发送的传出 HTTP 请求可以选择使用基于以逗号分隔的 proxy-mapping 的代理服务器。proxy-mapping 以 hostnamePattern;proxyUri
的形式表示基于 regex 的主机名模式和 proxy-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 请求 Truststore
当 Red Hat Single Sign-On 在远程 HTTPS 端点上调用时,必须验证远程服务器的证书,以确保它连接到可信服务器。这是为了防止中间人攻击所必需的。这些远程服务器的证书或签署这些证书的 CA 必须放在信任存储中。此信任存储由 Red Hat Single Sign-On 服务器管理。
在安全地连接到身份代理、LDAP 身份提供程序、发送电子邮件和与客户端应用程序的后端通道通信时,使用 truststore。
默认情况下,不会配置信任存储提供程序,任何 https 连接都回退到标准的 java 信任存储配置,如 Java 的 JSSE 参考指南 中所述。如果没有建立信任,则这些传出 HTTPS 请求将失败。
您可以使用 keytool 创建新的信任存储文件,或向现有主机添加可信主机证书:
$ keytool -import -alias HOSTDOMAIN -keystore truststore.jks -file host-certificate.cer
truststore 在您分发的 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 请求需要一种方法来验证它们要与之通信的服务器的主机。这是信任者的作用。密钥存储包含一个或多个可信主机证书或证书颁发机构。此 truststore 文件应该只包含您的安全主机的公共证书。
如果禁用
,则这是 REQUIRED。 - password
-
truststore 的密码。
如果禁用
,则这是 REQUIRED。 - hostname-verification-policy
-
默认
WILDCARD
。对于 HTTPS 请求,这会验证服务器证书的主机名。ANY
表示主机名不会被验证。WILDCARD
Allows wildcard in subdomain name i.e. Iffoo.com.STRICT
CN 必须完全匹配主机名。 - disabled
-
如果为 true (默认值),则忽略信任存储配置,证书检查将回退到 JSSE 配置,如下所述。如果设置为 false,则必须为信任存储
配置文件
,和密码
。