第 3 章 执行高级步骤
本章论述了高级流程,如为 Red Hat Single Sign-On 服务器设置密钥存储和信任存储、创建管理员帐户以及可用红帽单点登录客户端注册方法的概述,以及配置集群的指导。
3.1. 部署 passthrough TLS 终止模板
您可以使用这些模板进行部署。它们需要 HTTPS、JGroups 密钥存储和红帽单点登录服务器信任存储,因此可用于使用您的自定义 HTTPS、JGroups 密钥存储和红帽单点登录服务器信任存储来实例化 Red Hat Single Sign-On 服务器信任存储。
3.1.1. 准备部署
流程
- 使用包含 cluster:admin 角色的用户登录 OpenShift CLI。
创建一个新项目
oc new-project sso-app-demo
$ oc new-project sso-app-demo
Copy to Clipboard Copied! 将
view
角色添加到default
服务帐户。这可让服务帐户查看 sso-app-demo 命名空间中的所有资源,这是管理集群所必需的。oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
Copy to Clipboard Copied!
3.1.2. 为红帽单点登录服务器创建 HTTPS 和Groups 密钥存储,以及 Truststore
在此过程中,openssl 工具包用于生成 CA 证书来签署 HTTPS 密钥存储,并为 Red Hat Single Sign-On 服务器创建一个信任存储。其密钥 工具 是 Java Development Kit 中包含的软件包,然后用于生成这些密钥存储的自签名证书。
使用重新加密 TLS 终止的 Red Hat Single Sign- On 应用程序模板 不需要 或 预期 HTTPS 和 JGroups 密钥存储和 Red Hat Single Sign-On 服务器信任存储已预先准备好。
再加密模板使用 OpenShift 的内部服务服务证书机密来自动创建 HTTPS 和 JGroups 密钥存储。也会自动创建 Red Hat Single Sign-On 服务器信任存储。它会预先填充 Java 系统路径中找到的所有已知可信 CA 证书文件。
如果要使用现有的 HTTPS /Groups 密钥存储来置备 Red Hat Single Sign-On 服务器,请改为使用一些直通模板。
先决条件
使用 passthrough TLS 终止的红帽单点登录应用程序模板需要部署以下内容:
- 用于加密 https 流量的 HTTPS 密钥存储,
- JGroups 密钥存储 用于为集群中节点之间的通信加密,以及
- Red Hat Single Sign-On 服务器 信任存储用于保护 Red Hat Single Sign-On 请求
对于生产环境,红帽建议您使用从验证证书颁发机构(CA)处购买的 SSL 证书进行 SSL 加密的连接(HTTPS)。
如需了解有关如何使用自签名或购买 SSL 证书的密钥存储的更多信息,请参阅 JBoss Enterprise Application Platform 安全指南。
创建 HTTPS 密钥存储:
流程
生成 CA 证书。选择并记住密码。提供相同的密码,当使用以下 CA 证书对证书签名请求进行签名 时:
openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
$ openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
Copy to Clipboard Copied! 为 HTTPS 密钥存储生成一个私钥。提供
mykeystorepass
作为密钥存储密码:keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
$ keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
Copy to Clipboard Copied! 为 HTTPS 密钥存储生成证书签名请求。提供
mykeystorepass
作为密钥存储密码:keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
$ keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
Copy to Clipboard Copied!
使用 CA 证书签署证书签名请求。提供 用于生成 CA 证书的同一密码 :
openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
Copy to Clipboard Copied! 注意要使前面的命令在一个行中正常工作,命令包含进程替换( <
()语法
)。确保您当前的 shell 环境支持此类语法。否则,您可能会遇到与意外令牌 '(' 消息相关的语法错误
。将 CA 证书导入到 HTTPS 密钥存储中。提供
mykeystorepass
作为密钥存储密码。回复
是这个证书?[no]:
问题:keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
Copy to Clipboard Copied! 将已签名的证书签名请求导入到 HTTPS 密钥存储中。提供
mykeystorepass
作为密钥存储密码:keytool -import -file sso.crt -alias jboss -keystore keystore.jks
$ keytool -import -file sso.crt -alias jboss -keystore keystore.jks
Copy to Clipboard Copied!
为 JGroups 密钥存储生成安全密钥:
提供 密钥密码
:
keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
$ keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
将 CA 证书导入到新的 Red Hat Single Sign-On 服务器信任存储中:
提供 mykeystorepass
作为信任存储密码。回复
是 这个证书?[no]:
问题:
keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
3.1.3. 创建 secret
流程
您创建名为 secrets 的对象,供 OpenShift 用于存放敏感信息,如密码或密钥存储。
为 HTTPS 和 JGroups 密钥存储创建 secret,以及 上一节中 生成的红帽单点登录服务器信任存储。
oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
$ oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
Copy to Clipboard Copied! 将这些 secret 链接到默认服务帐户,用于运行 Red Hat Single Sign-On Pod。
oc secrets link default sso-app-secret
$ oc secrets link default sso-app-secret
Copy to Clipboard Copied!
3.1.4. 使用 OpenShift CLI 部署 Passthrough TLS 模板
在您创建了 keystores 和 secrets 后,使用 oc
命令部署一个透传的 TLS termination 模板。
3.1.4.1. oc
命令指南
在以下 oc
命令中,SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD、HTTPS_PASSWORD、JGROUPS_ENCRYPT_PASSWORD 和 SSO_TRUSTSTORE_PASSWORD 变量的值与 sso76-ocp4-https Red Hat Single Sign-On 应用程序模板中的默认值匹配。
对于生产环境,红帽建议您查阅机构的现场策略,以获取为红帽单点登录服务器的管理员用户帐户生成强用户名和密码的指导,以及红帽单点登录服务器的信任存储。
另外,在创建模板时,使密码与您在创建密钥存储时提供的密码相匹配。如果您使用了不同的用户名或密码,请修改模板中的参数的值以匹配您的环境。
您可以使用以下 keytool 命令确定与证书关联的别名名称。keytool 是 Java Development Kit 中包含的软件包。
keytool -v -list -keystore keystore.jks | grep Alias
$ keytool -v -list -keystore keystore.jks | grep Alias
Enter keystore password: mykeystorepass
Alias name: xpaas.ca
Alias name: jboss
keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
$ keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
Enter keystore password: password
Alias name: secret-key
以下命令中的 SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD 和 SSO_REALM 模板参数都是可选的。
3.1.4.2. oc
命令示例
oc new-app --template=sso76-ocp4-https \ -p HTTPS_SECRET="sso-app-secret" \ -p HTTPS_KEYSTORE="keystore.jks" \ -p HTTPS_NAME="jboss" \ -p HTTPS_PASSWORD="mykeystorepass" \ -p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \ -p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \ -p JGROUPS_ENCRYPT_NAME="secret-key" \ -p JGROUPS_ENCRYPT_PASSWORD="password" \ -p SSO_ADMIN_USERNAME="admin" \ -p SSO_ADMIN_PASSWORD="redhat" \ -p SSO_REALM="demorealm" \ -p SSO_TRUSTSTORE="truststore.jks" \ -p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \ -p SSO_TRUSTSTORE_SECRET="sso-app-secret"
$ oc new-app --template=sso76-ocp4-https \
-p HTTPS_SECRET="sso-app-secret" \
-p HTTPS_KEYSTORE="keystore.jks" \
-p HTTPS_NAME="jboss" \
-p HTTPS_PASSWORD="mykeystorepass" \
-p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \
-p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \
-p JGROUPS_ENCRYPT_NAME="secret-key" \
-p JGROUPS_ENCRYPT_PASSWORD="password" \
-p SSO_ADMIN_USERNAME="admin" \
-p SSO_ADMIN_PASSWORD="redhat" \
-p SSO_REALM="demorealm" \
-p SSO_TRUSTSTORE="truststore.jks" \
-p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \
-p SSO_TRUSTSTORE_SECRET="sso-app-secret"
--> Deploying template "openshift/sso76-ocp4-https" to project sso-app-demo
Red Hat Single Sign-On 7.6.11 (Ephemeral with passthrough TLS)
---------
An example Red Hat Single Sign-On 7 application. For more information about using this template, see https://github.com/jboss-openshift/application-templates.
A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm via the Red Hat Single Sign-On console is admin/redhat. Please be sure to create the following secrets: "sso-app-secret" containing the keystore.jks file used for serving secure content; "sso-app-secret" containing the jgroups.jceks file used for securing JGroups communications; "sso-app-secret" containing the truststore.jks file used for securing Red Hat Single Sign-On requests.
* With parameters:
* Application Name=sso
* Custom http Route Hostname=
* Custom https Route Hostname=
* Server Keystore Secret Name=sso-app-secret
* Server Keystore Filename=keystore.jks
* Server Keystore Type=
* Server Certificate Name=jboss
* Server Keystore Password=mykeystorepass
* Datasource Minimum Pool Size=
* Datasource Maximum Pool Size=
* Datasource Transaction Isolation=
* JGroups Secret Name=sso-app-secret
* JGroups Keystore Filename=jgroups.jceks
* JGroups Certificate Name=secret-key
* JGroups Keystore Password=password
* JGroups Cluster Password=yeSppLfp # generated
* ImageStream Namespace=openshift
* Red Hat Single Sign-On Administrator Username=admin
* Red Hat Single Sign-On Administrator Password=redhat
* Red Hat Single Sign-On Realm=demorealm
* Red Hat Single Sign-On Service Username=
* Red Hat Single Sign-On Service Password=
* Red Hat Single Sign-On Trust Store=truststore.jks
* Red Hat Single Sign-On Trust Store Password=mykeystorepass
* Red Hat Single Sign-On Trust Store Secret=sso-app-secret
* Container Memory Limit=1Gi
--> Creating resources ...
service "sso" created
service "secure-sso" created
service "sso-ping" created
route "sso" created
route "secure-sso" created
deploymentconfig "sso" created
--> Success
Run 'oc status' to view your app.