8.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.x.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 管理控制台中配置。
8.3.1. 为 Red Hat Single Sign-On 服务器启用 SSL/HTTPS 复制链接链接已复制到粘贴板!
如果您不使用反向代理或负载均衡器来处理 HTTPS 流量,则需要为 Red Hat Single Sign-On 服务器启用 HTTPS。这涉及
- 获取或生成包含 SSL/HTTP 流量的私钥和证书的密钥存储
- 配置 Red Hat Single Sign-On 服务器以使用此密钥对和证书。
8.3.1.1. 创建证书和 Java 密钥存储 复制链接链接已复制到粘贴板!
为了允许 HTTPS 连接,您需要获取自签名或第三方签名的证书,并将其导入到 Java 密钥存储中,然后才能在您将 Red Hat Single Sign-On 服务器部署到 web 容器中启用 HTTPS。
8.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
8.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:10.0" 的子元素,应包含以下小节:
<subsystem xmlns="urn:jboss:domain:undertow:10.0">
<buffer-cache name="default"/>
<server name="default-server">
<https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
...
</subsystem>