8.4. 为 Red Hat Single Sign-On 服务器启用 HTTPS/SSL
如果您不使用反向代理或负载均衡器来处理 HTTPS 流量,则需要为 Red Hat Single Sign-On 服务器启用 HTTPS。这涉及
- 获取或生成包含 SSL/HTTP 流量的私钥和证书的密钥存储
- 配置红帽单点登录服务器以使用此密钥对和证书。
8.4.1. 创建证书和 Java 密钥存储
为了允许 HTTPS 连接,您需要获取自签名或第三方签名证书,并将其导入到 Java 密钥存储中,然后才能在其中部署 Red Hat Single Sign-On Server 的 web 容器中启用 HTTPS。
8.4.1.1. 自签名证书
在开发中,您可能没有可用的第三方签名证书来测试 Red Hat Single Sign-On 部署,因此您将需要使用 Java JDK 附带的 密钥
工具生成自签名证书。
$ 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
其中,
您的域
是生成此证书的 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.4.2. 配置红帽单点登录以使用密钥存储
现在,您已拥有有适当证书的 Java 密钥存储,您需要配置您的红帽单点登录安装才能使用它。使用适用于您的安装的配置步骤:
8.4.2.1. JBoss 安全传统
流程
- 编辑 standalone.xml、standalone-ha.xml 或 host.xml 文件,以使用密钥存储并启用 HTTPS。
将密钥存储文件移到 部署的 配置目录中,或者在您选择的位置中的文件,并提供绝对路径。
如果您使用绝对路径,请从配置中删除可选的
relative-to
参数(请参阅 操作模式)。-
在 JBoss EAP 的
bin
目录中,创建一个名为sso_legacy.cli
的批处理文件。 在批处理文件中添加以下内容:
# Start batching commands batch /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) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm) # Run the batch commands run-batch
- 启动 Red Hat Single Sign-On 服务器。
-
更改到 JBoss EAP 的
bin
目录。 运行以下脚本:
$ sh jboss-cli.sh --connect --file=sso_legacy.cli The batch executed successfully process-state: reload-required
-
重启 Red Hat Single Sign-On 服务器,使
sso_legacy.cli
更改生效。
8.4.2.2. Elytron TLS v1.2
流程
-
在 JBoss EAP 的
bin
目录中,创建一个名为sso.cli
的批处理文件。 在批处理文件中添加以下内容:
# Start batching commands batch # Add the keystore, key manager and ssl context configuration in the elytron subsystem /subsystem=elytron/key-store=httpsKS:add(relative-to=jboss.server.config.dir,path=keycloak.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret}) /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"]) # Change the undertow subsystem configuration to use the ssl context defined in the previous step for https /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC) # Run the batch commands run-batch
- 启动 Red Hat Single Sign-On 服务器。
-
更改到 JBoss EAP 的
bin
目录。 运行以下脚本:
$ sh jboss-cli.sh --connect --file=sso.cli The batch executed successfully process-state: reload-required
-
重启 Red Hat Single Sign-On 服务器,使
sso.cli
更改生效。
有关配置 TLS 的更多信息,请参阅 WildFly 文档。
8.4.2.3. Elytron TLS 1.3
流程
-
在 JBoss EAP 的
bin
目录中,创建一个名为sso.cli
的批处理文件。 在批处理文件中添加以下内容:
batch # Add the keystore, key manager and ssl context configuration in the elytron subsystem /subsystem=elytron/key-store=httpsKS:add(relative-to=jboss.server.config.dir,path=keycloak.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret}) /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.3"]) /subsystem=elytron/server-ssl-context=httpsSSC:write-attribute(name=cipher-suite-names,value=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256) # Change the undertow subsystem configuration to use the ssl context defined in the previous step for https /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=httpsSSC) # Run the batch commands run-batch
- 启动 Red Hat Single Sign-On 服务器。
-
更改到 JBoss EAP 的
bin
目录。 运行以下脚本:
$ sh jboss-cli.sh --connect --file=sso.cli The batch executed successfully process-state: reload-required
-
重启 Red Hat Single Sign-On 服务器,使
sso.cli
更改生效。
有关配置 TLS 的更多信息,请参阅 WildFly 文档。