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。这涉及
- 获取或生成包含 SSL/HTTP 流量的私钥和证书的密钥存储
- 配置 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.xml、standalone-ha.xml 或 host.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>
;/ 前缀的每个主机上执行命令(以便在其中创建 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>