3.9. 配置域密钥
Red Hat Single Sign-On 使用的身份验证协议需要加密签名,有时也会加密。Red Hat Single Sign-On 使用非对称密钥对(私钥和公钥)来实现此目的。
Red Hat Single Sign-On 有一个活跃的密钥对,但也可以有多个被动键。主动密钥对用于创建新签名,而可以使用被动密钥对来验证之前的签名。这样可以定期轮转密钥,而不会对用户造成停机或中断。
创建域时,会自动生成密钥对和自签名证书。
流程
- 在 Admin 控制台中选择 realm。
- 单击 Realm 设置。
- 点 Keys。
- 点 Passive 查看被动键。
- 点 Disabled 查看禁用的密钥。
密钥对可以具有 Active
状态,但仍然未选择为该域的当前活动密钥对。所选用于签名的活跃对根据根据优先级排序的第一个密钥供应商来选择,它们可以提供一个活跃的密钥对。
3.9.1. 轮转密钥 复制链接链接已复制到粘贴板!
我们建议您定期轮转密钥。首先,创建优先级高于现有活跃密钥的新密钥。相反,您可以使用相同的优先级创建新密钥,并使之前的密钥被动。
新密钥可用后,所有新令牌和 Cookie 都用新密钥签名。当用户向应用进行身份验证时,SSO cookie 将使用新签名进行更新。刷新 OpenID Connect 令牌时,新的令牌将使用新密钥签名。最后,所有 Cookie 和令牌都使用新密钥,并在同时删除旧密钥之后。
删除旧密钥的频率在安全性之间是利弊,并确保所有 Cookie 和令牌都已更新。考虑在创建新的密钥后,每三至六个月创建新密钥,并在创建新密钥后将旧密钥删除一到两个月。如果用户在添加的新密钥和要删除的旧密钥间处于非活动状态,则用户必须重新进行身份验证。
轮转密钥也适用于离线令牌。为确保它们已更新,应用程序需要在删除旧密钥前刷新令牌。
3.9.2. 添加生成的密钥对 复制链接链接已复制到粘贴板!
使用这个流程生成包含自签名证书的密钥对。
流程
- 在 Admin 控制台中选择 realm。
- 单击 Realm 设置。
- 点 Keys 标签页。
- 单击 Providers 选项卡。
- 单击 Add keystore,再选择 rsa-generated。
- 在 优先级 字段中输入数字。此数字决定了新密钥对是否成为活跃的密钥对。最高数字使密钥对处于活动状态。
- 为 keysize 选择一个值。
- 点 Save。
更改供应商的优先级不会生成密钥,但如果要更改 keysize,则可编辑提供程序和新密钥。
3.9.3. 通过提取证书来轮转密钥 复制链接链接已复制到粘贴板!
您可以通过从 RSA 生成的密钥对中提取证书并在新密钥存储中使用该证书来轮转密钥。
先决条件
- 生成的密钥对
流程
- 在 Admin 控制台中选择 realm。
- 单击 Realm Settings。
点 Keys 标签页。
此时会出现 Active key 列表。
在带有 RSA 密钥的行中,点 Public Keys 下的 Certificate。
证书以文本形式出现。
将证书保存到文件中,并将其放在这些行中。
----Begin Certificate---- <Output> ----End Certificate----
----Begin Certificate---- <Output> ----End Certificate----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 keytool 命令将密钥文件转换为 PEM 格式。
从密钥存储中删除当前的 RSA 公钥证书。
keytool -delete -keystore <keystore>.jks -storepass <password> -alias <key>
keytool -delete -keystore <keystore>.jks -storepass <password> -alias <key>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新证书导入到密钥存储中
keytool -importcert -file domain.crt -keystore <keystore>.jks -storepass <password> -alias <key>
keytool -importcert -file domain.crt -keystore <keystore>.jks -storepass <password> -alias <key>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消部署并重新构建应用。
wildfly:undeploy mvn clean install wildfly:deploy
wildfly:undeploy mvn clean install wildfly:deploy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9.4. 添加现有的密钥对和证书 复制链接链接已复制到粘贴板!
要添加在其他位置获取的密钥对和证书 ,
并从下拉菜单中选择 rsa
。您可以更改优先级,以确保新密钥对成为活跃的密钥对。
先决条件
- 私钥文件。该文件必须采用 PEM 格式。
流程
- 在 Admin 控制台中选择 realm。
- 单击 Realm 设置。
- 点 Keys 标签页。
- 单击 Providers 选项卡。
- 单击 Add keystore,再选择 rsa。
- 在 优先级 字段中输入数字。此数字决定了新密钥对是否成为活跃的密钥对。
- 点 Private RSA Key 旁边的 Select file 来上传私钥文件。
- 如果您的私钥有签名证书,点 Select file beside X509 Certificate to upload the certificate file。如果您尚未上传证书,红帽单点登录会生成自签名证书。
- 点 Save。
3.9.5. 从 Java 密钥存储加载密钥 复制链接链接已复制到粘贴板!
要添加存储在主机上的 Java 密钥存储文件中的密钥对和证书,请选择 Providers
,再从下拉菜单中选择 java-keystore
。您可以更改优先级,以确保新密钥对成为活跃的密钥对。
要让相关的证书链被导入到 Java Keystore 文件中,必须使用相同的 Key Alias
来加载密钥对。
流程
- 在 Admin 控制台中选择 realm。
- 单击 Realm 设置。
- 点 Keys 标签页。
- 单击 Providers 选项卡。
- 单击 Add keystore,再选择 java-keystore。
- 在 优先级 字段中输入数字。此数字决定了新密钥对是否成为活跃的密钥对。
- 为 Keystore 输入一个值。
- 为" 密钥存储密码"输入值。
- 为 Key Alias 输入值。
- 为"密钥密码 "输入值。
- 点 Save。
3.9.6. 使键被动 复制链接链接已复制到粘贴板!
流程
- 在 Admin 控制台中选择 realm。
- 点 Realm 设置。
- 点 Keys 标签页。
- 点 Active 标签页。
- 点击您要进行被动的键的供应商。
- 将 Active 切换到 OFF。
- 点 Save。
3.9.7. 禁用密钥 复制链接链接已复制到粘贴板!
流程
- 在 Admin 控制台中选择 realm。
- 点 Realm 设置。
- 点 Keys 标签页。
- 点 Active 标签页。
- 点击您要进行被动的键的供应商。
- 将 Enabled 切换到 OFF。
- 点 Save。
3.9.8. 破坏的密钥 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 具有仅存储在本地的签名密钥,它们永远不会与客户端应用程序、用户或其它实体共享。但是,如果您认为您的域签名密钥已被泄露,则应该首先生成新密钥对(如上所述),然后立即删除已被破坏的密钥对。
或者,您可以从 Providers
表中删除提供程序。
流程
- 点菜单中的 Clients。
- 单击 security-admin-console。
- 单击 Revocation 选项卡。
- 单击 Set to now。
- 点 Push。
推送 not-before 策略可确保客户端应用程序不接受已被破坏的密钥签名的现有令牌。客户端应用程序被强制从 Red Hat Single Sign-On 下载新的密钥对,因此已被破坏的密钥签名的令牌将无效。
REST 和机密客户端必须设置 Admin URL,以便 Red Hat Single Sign-On 可以在策略请求前发送推送后的客户端。