7.3. 设置 HTTPS/SSL


警告

默认情况下,Red Hat Single Sign-On 没有设置为处理 SSL/HTTPS。强烈建议您在 Red Hat Single Sign-On 服务器本身或 Red Hat Single Sign-On 服务器前在反向代理中启用 SSL。

这个默认行为由每个 Red Hat Single Sign-On 域的 SSL/HTTPS 模式定义。服务器管理指南中的 更为详细地讨论,但让我们提供了一些上下文以及这些模式的简要概述。

外部请求
Red Hat Single Sign-On 可以在没有 SSL 的情况下运行,只要您坚持使用私有 IP 地址(如 localhost,127.0.0.1,10.0.x.x,192.168.x.x, 和 172.16.x.x )。如果您没有在服务器上配置 SSL/HTTPS,或者您试图通过 HTTP 从非专用 IP 地址访问 Red Hat Single Sign-On,则会出现错误。
none
Red Hat Single Sign-On 不需要 SSL。您应该真正在开发过程中使用。
所有请求
Red Hat Single Sign-On 需要 SSL 用于所有 IP 地址。

每个域的 SSL 模式可以在 Red Hat Single Sign-On 管理控制台中配置。

7.3.1. 为 Red Hat Single Sign-On 服务器启用 SSL/HTTPS

如果您不使用反向代理或负载均衡器来处理 HTTPS 流量,则需要为 Red Hat Single Sign-On 服务器启用 HTTPS。这涉及

  1. 获取或生成包含 SSL/HTTP 流量的私钥和证书的密钥存储
  2. 配置 Red Hat Single Sign-On 服务器以使用此密钥对和证书。

7.3.1.1. 创建证书和 Java 密钥存储

为了允许 HTTPS 连接,您需要获取自签名或第三方签名的证书,并将其导入到 Java 密钥存储中,然后才能在您将 Red Hat Single Sign-On 服务器部署到 web 容器中启用 HTTPS。

7.3.1.1.1. 自签名证书

在开发中,您可能没有第三方签名的证书来测试 Red Hat Single Sign-On 部署,因此您需要使用与 Java JDK 附带的 keytool 程序生成自签名证书。

$ keytool -genkey -alias localhost -keyalg RSA -keystore keycloak.jks -validity 10950
    Enter keystore password: secret
    Re-enter new password: secret
    What is your first and last name?
    [Unknown]:  localhost
    What is the name of your organizational unit?
    [Unknown]:  Keycloak
    What is the name of your organization?
    [Unknown]:  Red Hat
    What is the name of your City or Locality?
    [Unknown]:  Westford
    What is the name of your State or Province?
    [Unknown]:  MA
    What is the two-letter country code for this unit?
    [Unknown]:  US
    Is CN=localhost, OU=Keycloak, O=Test, L=Westford, ST=MA, C=US correct?
    [no]:  yes

您应该回答 您的名字和姓氏是什么? 问题是您要安装该服务器的计算机的 DNS 名称。出于测试目的,应使用 localhost。执行此命令后,keycloak.jks 文件将生成在您执行 keytool 命令相同的目录中。

如果您希望第三方签名的证书,但没有一个证书,您可以在 cacert.org 获取一个空闲证书。但是,在执行此操作之前,必须先进行一些设置。

首先要做的是生成一个证书请求:

$ keytool -certreq -alias yourdomain -keystore keycloak.jks > keycloak.careq

其中 yourdomain 是为其生成此证书的 DNS 名称。keytool 生成请求:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC2jCCAcICAQAwZTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMREwDwYDVQQHEwhXZXN0Zm9y
ZDEQMA4GA1UEChMHUmVkIEhhdDEQMA4GA1UECxMHUmVkIEhhdDESMBAGA1UEAxMJbG9jYWxob3N0
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr7kck2TaavlEOGbcpi9c0rncY4HhdzmY
Ax2nZfq1eZEaIPqI5aTxwQZzzLDK9qbeAd8Ji79HzSqnRDxNYaZu7mAYhFKHgixsolE3o5Yfzbw1
29RvyeUVe+WZxv5oo9wolVVpdSINIMEL2LaFhtX/c1dqiqYVpfnvFshZQaIg2nL8juzZcBjj4as
H98gIS7khql/dkZKsw9NLvyxgJvp7PaXurX29fNf3ihG+oFrL22oFyV54BWWxXCKU/GPn61EGZGw
Ft2qSIGLdctpMD1aJR2bcnlhEjZKDksjQZoQ5YMXaAGkcYkG6QkgrocDE2YXDbi7GIdf9MegVJ35
2DQMpwIDAQABoDAwLgYJKoZIhvcNAQkOMSEwHzAdBgNVHQ4EFgQUQwlZJBA+fjiDdiVzaO9vrE/i
n2swDQYJKoZIhvcNAQELBQADggEBAC5FRvMkhal3q86tHPBYWBuTtmcSjs4qUm6V6f63frhveWHf
PzRrI1xH272XUIeBk0gtzWo0nNZnf0mMCtUBbHhhDcG82xolikfqibZijoQZCiGiedVjHJFtniDQ
9bMDUOXEMQ7gHZg5q6mJfNG9MbMpQaUVEEFvfGEQQxbiFK7hRWU8S23/d80e8nExgQxdJWJ6vd0X
MzzFK6j4Dj55bJVuM7GFmfdNC52pNOD5vYe47Aqh8oajHX9XTycVtPXl45rrWAH33ftbrS8SrZ2S
vqIFQeuLL3BaHwpl3t7j2lMWcK1p80laAxEASib/fAwrRHpLHBXRcq6uALUOZl4Alt8=
-----END NEW CERTIFICATE REQUEST-----

将此 ca 请求发送到您的 CA。CA 将发出您签名的证书并将其发送给您。在导入新证书前,您必须获取并导入 CA 的 root 证书。您可以从 CA 下载证书(例如:root.crt)并导入,如下所示:

$ keytool -import -keystore keycloak.jks -file root.crt -alias root

最后一步是将生成的新 CA 证书导入到密钥存储中:

$ keytool -import -alias yourdomain -keystore keycloak.jks -file your-certificate.cer

7.3.1.2. 配置红帽单点登录以使用密钥存储

现在,您已有一个带有适当证书的 Java 密钥存储,您需要配置 Red Hat Single Sign-On 安装以使用它。首先,您必须编辑 standalone.xmlstandalone-ha.xmlhost.xml 文件,以使用密钥存储并启用 HTTPS。然后,您可以将密钥存储文件移到部署的 configuration/ 目录中,也可以是您选择的位置的文件,并提供绝对路径。如果您使用绝对路径,请从您的配置中删除可选的 relative-to 参数(See 操作模式)。

使用 CLI 添加新的 security-realm 元素:

$ /core-service=management/security-realm=UndertowRealm:add()

$ /core-service=management/security-realm=UndertowRealm/server-identity=ssl:add(keystore-path=keycloak.jks, keystore-relative-to=jboss.server.config.dir, keystore-password=secret)

如果使用域模式,则应在使用 /host=<host_name&gt;/ 前缀的每个主机上执行命令(以便在其中创建 security-realm ),如下所示,您要为每个主机重复这些命令:

$ /host=<host_name>/core-service=management/security-realm=UndertowRealm/server-identity=ssl:add(keystore-path=keycloak.jks, keystore-relative-to=jboss.server.config.dir, keystore-password=secret)

在独立或主机配置文件中,security-realms 元素应该类似如下:

<security-realm name="UndertowRealm">
    <server-identities>
        <ssl>
            <keystore path="keycloak.jks" relative-to="jboss.server.config.dir" keystore-password="secret" />
        </ssl>
    </server-identities>
</security-realm>

接下来,在独立或每个域配置文件中搜索任何 security-realm 实例。修改 https-listener 以使用创建的域:

$ /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm)

如果使用域模式,请在命令前添加用于的配置文件: /profile=<profile_name>/

生成的元素 server name="default-server",它是 子系统 xmlns="urn:jboss:domain:undertow:6.0" 的子元素,应包含以下小节:

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
   <buffer-cache name="default"/>
   <server name="default-server">
      <https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
   ...
</subsystem>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.