8.3. 设置 HTTPS/SSL
默认情况下,Red Hat Single Sign-On 没有设置来处理 SSL/HTTPS。强烈建议您在红帽单点登录服务器本身或在 Red Hat Single Sign-On 服务器前启用 SSL。
这个默认行为由每个 Red Hat Single Sign-On 域的 SSL/HTTPS 模式定义。《 服务器管理指南》 中会对此进行更为详细的探讨,但让我们给出一些上下文并简要概述这些模式。
- 外部请求
-
Red Hat Single Sign-On 可以在没有 SSL 的情况下开箱即用,只要您坚持使用
localhost、127.0.0.1、10.x.x.x、192.x.x 和172.16.等私有 IP 地址。如果您没有在服务器上配置的 SSL/HTTPS,或者尝试从非专用 IP 地址通过 HTTP 访问 Red Hat Single Sign-On,则会出现错误。x.x - none
- 红帽单点登录不需要 SSL。只有在您关注的事情时,这才应该真正在开发中使用。
- 所有请求
- 红帽单点登录需要所有 IP 地址的 SSL。
在 Red Hat Single Sign-On 管理控制台中配置每个域的 SSL 模式。
8.3.1. 为 Red Hat Single Sign-On 服务器启用 SSL/HTTPS 复制链接链接已复制到粘贴板!
如果您不使用反向代理或负载均衡器来处理 HTTPS 流量,则需要为 Red Hat Single Sign-On 服务器启用 HTTPS。这涉及
- 获取或生成包含 SSL/HTTP 流量的私钥和证书的密钥存储
- 配置红帽单点登录服务器以使用此密钥对和证书。
8.3.1.1. 创建证书和 Java 密钥存储 复制链接链接已复制到粘贴板!
为了允许 HTTPS 连接,您需要获取自签名或第三方签名证书并将其导入到 Java 密钥存储,然后才能在部署 Red Hat Single Sign-On 服务器的 web 容器中启用 HTTPS。
8.3.1.1.1. 自签名证书 复制链接链接已复制到粘贴板!
在开发过程中,您可能没有可用的第三方签名证书来测试红帽单点登录部署,因此您将需要使用 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其中
您的域是生成此证书的 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. 配置 Red Hat Single Sign-On 以使用 Keystore 复制链接链接已复制到粘贴板!
现在,您已具有适当证书的 Java 密钥存储,您需要配置 Red Hat Single Sign-On 安装才能使用它。
流程
- 编辑 standalone.xml、standalone-ha.xml 或 host.xml 文件,以使用密钥存储并启用 HTTPS。
将密钥存储文件移到部署的 配置/ 目录中,或者您选择的位置或提供该文件的绝对路径。
如果您使用绝对路径,请从您的配置中删除可选的
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>-
在独立或每个域配置文件中,搜索任何
安全域实例。 修改
https-listener以使用创建的域:$ /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm)如果使用域模式,为命令添加与以下内容一起使用的配置集:
/profile=<profile_name>/。生成的元素
server name="default-server"是指subsystem xmlns="urn:jboss:domain:undertow:12.0"的子元素,它应包含以下小节:<subsystem xmlns="urn:jboss:domain:undertow:12.0"> <buffer-cache name="default"/> <server name="default-server"> <https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/> ... </subsystem>