OAM 和 STS 中的密钥和证书管理和滚动更新
简介
作为联邦和 WS-Trust 协议交互的一部分,OAM/OSTS 需要使用 PKI 密钥和证书,通过数字加密使用数字签名和机密性来实现非拒绝和完整性。
本文讨论了密钥和证书管理,包括如何:
-
生成新密钥和证书
-
将 OAM 和 OSTS 配置为使用新密钥和证书
-
按合作伙伴实施密钥滚转
-
将新证书分发给合作伙伴
在联盟/WS-Trust 交换中,会发生以下情况:
-
OAM/OSTS 使用自己的 PKI 密钥和证书对 SAML 消息执行签名和解密操作
-
对传出 SAML 消息和断言进行签名(XML 数字签名或查询字符串签名)
-
解密传入的 SAML 断言(XML 数字加密)
-
OAM/OSTS 使用合作伙伴的签名或加密证书来执行以下操作:
-
验证传入 SAML 消息和断言的签名 (XML)
-
(可选)加密传出 SAML 断言(XML 数字加密)
具有 XML 数字签名的 SAML 消息示例:
<samlp:Response ...>
<saml:Issuer>https://idp.com</saml:Issuer>
<samlp:Status>...</samlp:Status>
<saml:Assertion ...>
<saml:Issuer>https://idp.com</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-excc14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsasha1"/>
<ds:Reference URI="#idhmf9KzAhxleuJ-L3vaVr979Ffa0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#envelopedsignature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>JGvBqil/NXa6dlMOn5ZhmBbOie8=</DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>VgOrU79ZJO4rzHiFTCDCGNmkb0...Y776QM4vEBBybIpbCCUih7I0aA==
</ds:SignatureValue>
</ds:Signature>
<saml:Subject>
<saml:NameID>alice@acme.com</saml:NameID>
...
</saml:Subject>
...
</saml:Assertion>
</samlp:Response>
具有查询字符串签名的 SAML 消息示例(通常由 SP 使用 AuthnRequest 将用户发送到 IdP):
https://idp.com/saml20sso?SAMLRequest=hZJRT8IwFIX%2FStP3sW5BTW7YEhRREtQFplHeytZBQ9fW3i7Kv3cUTdAHfL09t985J3eEvFUV47wR68tkqjRAeMto5DYajRNC8FQi%2BguX4YQ7pgIF1xpvKKEom%2FZ7U3EujM7r13iLEsaztoDItJVPjKhEQGW24QkHJbLtTFyuuS7bbsLVcpK92OmdN8XYb9SLETsw0eq59RlOWDCOWRikrkytIhsAuV5QU3x6upa6l3pw3vD6KEO7LsoiKp2VJyYtDrEhgN1JEee%2F5YjCHbKHqC335%2BWHSZ%2B9CVIQ2ku%2Fp%2FlPaxhKG8UnRo6uLDz2i7NJYZSs9mSslPm4cYJ7kVkf%2BCdRisq2UhR0zg%2FQn9fQ%2F4F&RelayState=id-mAK1whfUGrvoLqqhU2ysXLWSIw-&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=S5TZ0uwK9SMZUgBfDaipbNhlLqbbSG9t4rgA9n3%2FwxFsK7H66IoK6G%2BDfaIUvc5bLtTrwmxsa2iB2gjFx8pQ6%2FgH8OtFbT7mKZ7z8FihgxxTKjHJ2FQocOEn%2FrkcRKAAq%2Blig5xVSlR%2BzLq1vkQzIMNOrfLw%2FM6uk3i%2Fk
SAMLRequest
:SAML AuthnRequest 消息
RelayState
:SAML 2.0 中继状态参数
SigAlg
:签名算法
Signature
:包含 SAMLRequest、RelayState 和 SigAlg 参数的签名字节
OAM/OSTS PKI 密钥和证书存储在 $DOMAIN_HOME/config/fmwconfig/.oamkeystore
Java 密钥库文件中(注:此密钥库的类型为 JCEKS,不是 JKS),而 OAM/OSTS 设置引用 .oamkeystore 中的密钥条目,以便这些密钥和证书可供 SAML 操作的组件使用。
安装
在 OAM 的安装阶段,将生成密钥对和自签名证书,并将 OAM/OSTS 配置为将其用于签名和解密操作。
-
OAM 安装程序使用随机密码创建 .oamkeystore(有关如何重置该密码,请参见“设置新密钥条目”一节)
-
创建名为
stsprivatekeyalias
的新密钥条目 -
RSA 密钥对
-
自签名证书
-
主题和发布者设置为:
cn=\<MACHINE_HOSTNAME\>
-
在 OAM/OSTS 配置中创建了两个条目:
-
osts_signing
,引用 .oamkeystore 中的stsprivatekeyalias
键条目 -
osts_encryption
,引用 .oamkeystore 中的stsprivatekeyalias
键条目 -
OAM 设置为将
osts_signing
条目用于签名操作,将osts_encryption
用于解密操作 -
OSTS 设置为将
osts_encryption
用于解密操作,将osts_signing
用于 SAML 发布模板中的签名操作
设置新密钥条目
在 OAM/OSTS 中使用新的 PKI 密钥和证书之前创建这些密钥和证书的过程包含两方面:
-
在
.oamkeystore
中创建密钥条目 -
在 OAM/OSTS 中创建条目以引用
.oamkeystore
中的键条目
注:密钥和证书需要存储在 .oamkeystore 中;不支持 HSM。
在 .oamkeystore 中创建新的密钥条目
如前所述,管理员不知道 .oamkeystore 密钥库的密码,需要重置该密码才能进行修改。此操作通过 WLST 命令完成:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh
进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()
。 -
导航到域运行时分支:
domainRuntime()
。 -
重置 .oamkeystore 密码:
resetKeystorePassword()
。 -
退出 WLST 环境:
exit()
。
在 .oamkeystore 中创建新密钥项的一种方法是使用 JDK 的 KeyTool 应用程序。在此示例中,创建了两个包含自签名证书的密钥条目,一个包含别名 samlsigning,另一个包含别名 samlencryption(用正确的路径替换 $JDK_HOME
和 $DOMAIN_HOME
;对于密钥库密码,输入您在重置操作期间选择的密钥条目):
$JDK_HOME/bin/keytool -genkeypair -alias samlsigning -keyalg RSA -keysize 2048-sigalg sha1withrsa -dname cn="ACME SAML Signing" -validity 1000 -keystore $DOMAIN_HOME/config/fmwconfig/.oamkeystore -storetype JCEKS
$JDK_HOME/bin/keytool -genkeypair -alias samlencryption -keyalg RSA -keysize 2048 -sigalg sha1withrsa -dname cn="ACME SAML Encryption" -validity 1000-keystore $DOMAIN_HOME/config/fmwconfig/.oamkeystore -storetype JCEKS
更新 OAM/OSTS 设置
在 .oamkeystore 中创建密钥条目后,必须在 OAM/OSTS 中创建新的 SAML 密钥条目,然后才能在 SAML 协议交换期间使用这些密钥。
要在 OAM/OSTS 中创建新的 SAML 密钥条目:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole
。 -
导航到配置、联盟设置或安全令牌服务设置。
-
创建新条目:
-
在 "Keystore" 部分中,单击 "+" 按钮。
-
为新条目输入 KeyID(例如
saml-signing
)。 -
从列出 .oamkeystore 中密钥条目的下拉列表中选择新密钥条目的别名(例如
samlsigning
)。 -
输入在上一节中创建密钥时设置的密钥条目的密码。
-
如果需要,对其他条目重复该过程。
-
-
单击应用。
插图 Federation_Settings.jpg 的说明
注:不同的密钥 ID 可以引用 OAM 密钥库中的相同密钥条目
使用新密钥条目
全局设置
要更新全局 OAM 设置以使用新密钥和证书对 SAML 消息进行签名和解密,请执行以下操作:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-admin-port/oamconsole
。 -
导航到配置、联盟设置。
-
从键项的下拉列表中选择 "Signing Key"(签名密钥)(这些条目在 "Keystore"(密钥库)部分中定义)。例如,选择
saml-signing
。 -
从密钥条目的下拉列表中选择加密密钥(这些条目在“密钥库”部分中定义)。例如,选择
saml-encryption
。 -
单击应用。
注:应用后,您可能需要向合作伙伴重新分发证书和/或 SAML 2.0 元数据 )
要更新全局 OSTS 设置以使用新密钥和证书对 SAML 消息解密,请执行以下操作:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole
。 -
导航到 Configuration 、 Security Token Service Settings 。
-
从密钥条目的下拉列表中选择默认加密模板(这些条目在“密钥库”部分中定义)。例如,选择
samlencryption
。 -
单击应用。
注意:申请后,您可能需要将证书重新分发给合作伙伴
插图 Security_Token_Service_Settings.jpg 的说明
要更新 OSTS 设置以使用新密钥和证书对 SAML 消息签名,请执行以下操作:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-admin- port/oamconsole
。 -
导航到 Security Token Service 、 Token Issuance Templates 。
-
单击要更新的 SAML 发布模板。
-
单击“安全性”选项卡。
-
从密钥条目的下拉列表中选择对密钥库访问模板 ID 进行签名(这些条目在“密钥库”部分中定义)。例如,选择
saml-signing
。 -
单击应用。
注意:申请后,您可能需要将证书重新分发给合作伙伴
按合作方的密钥滚转
当 OAM/OSTS 部署涉及众多合作伙伴时,可能很难同时更改全局签名/加密密钥/证书,因为这需要同时通知所有合作伙伴更改,并让他们使用新的证书/SAML 2.0 元数据更新其配置。
注:更新 OAM/OSTS 中的密钥/证书后,联盟/WS-Trust 流在合作伙伴系统中上载新证书之前不会与合作伙伴一起工作。
OAM/OSTS 提供了一种在每个合作伙伴的基础上执行密钥滚转的简单方法,从而允许 OAM 管理员计划如何以及何时将密钥和证书更改通知特定合作伙伴。
-
为 OAM IdP 或 SP 合作伙伴执行密钥滚转涉及:
-
按照上一节中的说明设置新密钥和证书。
-
更新 OAM 中的 IdP 或 SP 伙伴配置以使用新密钥和证书。
-
使用专门使用这些新密钥/证书生成的新 SAML 2.0 元数据或者与新密钥条目对应的新证书通知合作伙伴。
-
-
为 OSTS 依赖方合作伙伴执行关键展期涉及:
-
按照上一节所述设置新密钥和证书(如果尚未设置)。
-
创建新的依赖方概要文件,该概要文件是依赖方合作伙伴使用的当前依赖方概要文件的副本。
-
创建新的 SAML 发布模板,即依赖方合作伙伴使用的当前依赖方概要信息引用的 SAML 发布模板的副本。
-
更新新的依赖方配置信息,以使用新的 SAML 发布模板而不是当前模板。
-
-
更新新的 SAML 发布模板以使用新密钥/证书
-
将依赖方合作伙伴分配给新的依赖方概要文件
注意:通过使用 OAM 配置中的合作伙伴概要信息,可以通过一组合作伙伴完成 OAM 密钥滚转。
OAM 密钥滚动更新
为特定合作伙伴执行密钥滚转时,首先需要通过 WLST 命令更新 OAM 中的 IdP 或 SP 合作伙伴配置:
-
通过执行
$IAM_ORACLE_HOME/common/bin/wlst.sh
进入 WLST 环境。 -
连接到 WLS 管理服务器:
connect()
。 -
导航到域运行时分支:
domainRuntime()
。 -
更新伙伴配置,将“签名密钥”属性(由
signingkeystoreaccesstemplateid
引用)设置为“联盟设置,密钥库”部分中定义的密钥条目 ID(在本例中,saml-signing
是密钥条目 ID;将<PARTNER_NAME>
替换为 OAM 中的伙伴名称;将<IDP_OR_SP>
替换为 IDP 或 SP,即伙伴的类型): - 更新伙伴配置,将 "Encryption Key"(加密密钥)属性(由
encryptionkeystoreaccesstemplateid
引用)设置为 "Association Settings"(联盟设置)、"Keystore"(密钥库)部分中定义的密钥条目 ID(在本示例中,saml-encryption 是密钥条目 ID;将<PARTNER_NAME>
替换为 OAM 中的伙伴名称;将<IDP_OR_SP>
替换为 IDP 或 SP(伙伴的类型): - 退出 WLST 环境:
exit()
。
updatePartnerProperty("<PARTNER_NAME>", "<IDP_OR_SP>","signingkeystoreaccesstemplateid", "saml-signing", "string")
updatePartnerProperty("<PARTNER_NAME>", "<IDP_OR_SP>", "encryptionkeystoreaccesstemplateid", "saml-encryption", "string")
更新合作伙伴配置后,合作伙伴需要使用 SAML 2.0 元数据或证书信息。要生成此信息:
-
如果需要为新的签名和加密密钥提供 SAML 2.0 元数据,请打开浏览器并使用以下 URL 生成元数据
http://oam-runtime-host:oam-runtime-port/oamfed/idp/metadata?signid=<SIGN_KEYENTRY_ID>&encid=<ENC_KEYENTRY_ID>
。 -
signid
查询参数包含签名证书的密钥条目 ID。 -
替换
<SIGN_KEYENTRY_ID>
。 -
encid
查询参数包含加密证书的密钥条目 ID。替换<SIGN_KEYENTRY_ID>
例如:http://oam.com/oamfed/idp/metadata?signid=saml-signing&encid=samlencryption
。 -
如果需要为新密钥提供证书文件,请打开浏览器并使用以下 URL 以 PEM 格式生成证书:
http://oam-runtime-host:oam-runtime-port/oamfed/idp/cert?id=<KEYENTRY_ID>
。 -
ID 查询参数包含证书的密钥条目 ID。
-
替换
<KEYENTRY_ID>
。
例如:http://oam.com/oamfed/idp/cert?id=saml-signing
注:在更新合作伙伴配置之前,可以先生成 SAML 2.0 元数据/证书并将其提供给合作伙伴。
OSTS 密钥滚动更新
要说明 OSTS 密钥滚转,请举例说明:
-
三个依赖方伙伴:RP1、RP2 和 RP3
-
两个依赖方配置文件:
RPprofileA
和RPprofileB
,使用RPprofileA
时使用 RP1 和 RP2,使用RPprofileB
时使用 RP3 -
两个 SAML 2.0 发行模板,
RPprofileA
引用的SAMLIssuanceA
和RPprofileB
引用的SAMLIssuanceB
结转包括先切换 RP1,然后切换 RP2,再切换 RP3,以使这些伙伴使用新的 saml-signing
证书。
要切换 RP1,必须执行以下操作:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-admin- port/oamconsole
。 -
定位至安全令牌服务、合作伙伴概要信息、依赖方概要信息。
-
创建名为
NewRPprofileA
的新依赖方配置文件,副本为RPprofileA
。 -
导航到 Security Token Service 、 Token Issuance Templates 。
-
创建名为
NewSAMLIssuanceA
的新 SAML 发布模板,副本为SAMLIssuanceA
。 -
更新
NewRPprofileA
以引用NewSAMLIssuanceA
SAML 2.0 发布模板。 - 在“安全性”选项卡中更新
NewSAMLIssuanceA
SAML 2.0 发布模板以使用新的密钥条目。 -
导航到安全标记服务、合作伙伴、依赖方。
-
打开 RP1 并将其配置为使用
NewRPprofileA
依赖方配置文件:从那时起,OSTS 使用新的密钥条目saml-signing
为 RP1 依赖方合作伙伴签署传出 SAML 2.0 断言。 - 通过打开浏览器从 OSTS 下载新证书,并使用以下 URL 以 PEM 格式生成证书。
-
ID 查询参数包含证书的密钥条目 ID。
-
替换
<KEYENTRY_ID>
。 - 向合作伙伴提供证书。
http://oam-runtime-host:oam-runtime-port/sts/servlet/samlcert?id=<KEYENTRY_ID>
例如:http://oam.com/sts/servlet/samlcert?id=saml-signing
将 RP2 切换到新证书会更快,因为已创建新的依赖方配置文件和 SAML 发布模板。
要切换 RP2,必须执行以下操作:
-
转到 OAM 管理控制台:
http(s)://oam-admin-host:oam-adminport/oamconsole
。 -
导航到安全标记服务、合作伙伴、依赖方。
-
打开 RP1 并将其配置为使用
NewRPprofileA
依赖方配置文件:从那时起,OSTS 使用新的密钥条目saml-signing
为 RP1 依赖方合作伙伴签署传出 SAML 2.0 断言。 -
向合作伙伴提供证书。
将 RP3 切换到新证书包括重复对 RP1 执行的操作,因为尚未为 RP3 创建新的依赖方配置文件和 SAML 发布模板。
注:在更新 OSTS 配置之前,可以先向合作伙伴提供新证书。
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Key and Certificate Management-Rollover in OAM and STS
F61370-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.