7.4. 传出 HTTP 请求


Red Hat Single Sign-On 服务器通常需要对安全的应用程序和服务进行非浏览器 HTTP 请求。auth 服务器通过维护 HTTP 客户端连接池来管理这些传出连接。在 standalone.xmlstandalone-ha.xmldomain.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="[&quot;.*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080&quot;,&quot;.*\\.acme\\.com;NO_PROXY&quot;,&quot;.*;http://fallback:8080&quot;]"/>
        </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.xmlstandalone-ha.xmldomain.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,则必须为信任存储 配置文件和密码
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.