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 命令來完成:
-
執行以下步驟來輸入 WLST 環境:
$IAM_ORACLE_HOME/common/bin/wlst.sh。 -
連線「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。 -
瀏覽至組態、同盟設定值或安全權杖服務設定值。
-
建立新項目:
-
在「金鑰存放區」區段中,按一下 "+" 按鈕。
-
輸入新項目的 KeyID (例如
saml-signing)。 -
從列出 .oamkeystore 中索引鍵項目的下拉式清單中,選取新索引鍵項目的別名 (例如
samlsigning)。 -
輸入您在上一個區段中建立該金鑰時,所設定之關鍵碼項目的密碼。
-
視需要為其他項目重複此程序。
-
-
按一下套用。

注意:不同的金鑰 ID 可參照「OAM 金鑰存放區」中的相同金鑰項目
使用新金鑰項目
全域設定值
若要更新全域 OAM 設定值以使用新金鑰和憑證來簽署和解密 SAML 訊息,請執行下列作業:
-
前往「OAM 管理主控台」:
http(s)://oam-admin-host:oam-admin-port/oamconsole。 -
瀏覽至組態、聯合設定值。
-
從金鑰項目的下拉式清單中選取「簽署金鑰」(這些項目是在「金鑰存放區」區段中定義)。例如,選取
saml-signing。 -
從金鑰項目的下拉式清單中選取「加密金鑰」(這些項目是在「金鑰存放區」區段中定義)。例如,選取
saml-encryption。 -
按一下套用。
注意:申請之後,您可能需要將憑證和 / 或 SAML 2.0 中繼資料重新分配給合作夥伴)

若要更新全域 OSTS 設定值以使用新金鑰和憑證來解密 SAML 訊息,請執行下列作業:
-
前往「OAM 管理主控台」:
http(s)://oam-admin-host:oam-adminport/oamconsole。 -
瀏覽至組態、 Security Token Service 設定值。
-
從金鑰項目的下拉式清單中選取「預設加密樣板」(這些項目是在「金鑰存放區」區段中定義)。例如,選取
samlencryption。 -
按一下套用。
備註:申請之後,您可能需要將憑證重新配銷給夥伴

Security_Token_Service_Settings.jpg 圖解說明
若要更新 OSTS 設定值以使用新金鑰和憑證簽署 SAML 訊息,請執行下列作業:
-
前往「OAM 管理主控台」:
http(s)://oam-admin-host:oam-admin- port/oamconsole。 -
瀏覽至 Security Token Service 、 Token Issuance 範本。
-
按一下要更新的「SAML 發放樣板」。
-
按一下安全性頁籤。
-
從金鑰項目的下拉式清單中選取簽署金鑰存放區存取樣板 ID (這些項目定義於「金鑰存放區」區段)。例如,選取
saml-signing。 -
按一下套用。
備註:申請之後,您可能需要將憑證重新配銷給夥伴

每個合作夥伴的索引鍵變換
OAM/OSTS 部署涉及許多合作夥伴時,可能難以一次變更全域簽署 / 加密金鑰 / 憑證,因為這需要在變更的同時通知所有合作夥伴,並讓他們使用新的憑證 /SAML 2.0 描述資料更新組態。
注意:更新 OAM/OSTS 中的金鑰 / 憑證之後,「聯合 /WS- 信任」流程必須等到合作夥伴將新憑證上傳到系統內,才能與合作夥伴合作。
OAM/OSTS 提供了一個簡單的方法,以每個合作夥伴為基礎執行金鑰變換,讓 OAM 管理員能夠規劃如何及何時通知特定合作夥伴金鑰和憑證變更。
-
為 OAM IdP 或 SP 合作夥伴執行金鑰輪換涉及:
-
如上節所述設定新金鑰和憑證。
-
更新 OAM 中的 IdP 或 SP 夥伴組態,以使用新的金鑰和憑證。
-
以這些新金鑰 / 憑證或對應新金鑰項目的新憑證,通知夥伴特別產生新的 SAML 2.0 描述資料。
-
-
執行 OSTS 信賴方合作夥伴的關鍵轉期包括:
-
如上一節所述設定新的金鑰和憑證 如果還未設定。
-
建立新的「信賴憑證者設定檔」,這是「信賴憑證者」夥伴使用之目前「信賴憑證者設定檔」的複本。
-
建立新的「SAML 發放樣板」,複製「信賴方」夥伴目前使用的「信賴方設定檔」所參照的「SAML 發放樣板」。
-
請更新新的信賴方設定檔,以使用新的「SAML 發行樣板」,而非目前的「SAML 發行樣板」。
-
-
更新新的「SAML 發行樣板」以使用新的金鑰 / 憑證
-
將信賴憑證者夥伴指定給新的信賴憑證者設定檔
注意:您可以在 OAM 組態中使用「夥伴設定檔」,透過一組合作夥伴來完成 OAM 金鑰變換。
OAM 金鑰輪換
為特定合作夥伴執行金鑰變換時,您必須先透過 WLST 命令更新 OAM 中的 IdP 或 SP Partner 組態:
-
執行以下步驟來輸入 WLST 環境:
$IAM_ORACLE_HOME/common/bin/wlst.sh。 -
連線「WLS 管理」伺服器:
connect()。 -
瀏覽至「網域程式實際執行」分支:
domainRuntime()。 -
更新夥伴組態,將「簽署金鑰」特性 (由
signingkeystoreaccesstemplateid參照) 設為「聯合設定值」和「金鑰存放區」區段中定義的金鑰項目 ID (在此範例中,saml-signing是金鑰項目 ID;將<PARTNER_NAME>取代為 OAM 中夥伴的名稱;將<IDP_OR_SP>取代為 IDP 或 SP (夥伴類型): - 更新夥伴組態,將「加密金鑰」特性 (由
encryptionkeystoreaccesstemplateid參照) 設為「聯合設定值」,「金鑰存放區」區段中定義的金鑰項目 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和 RP3,使用RPprofileBRP1 和 RP2 -
RPprofileA參考的兩個 SAML 2.0 發放範本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 範本。
-
建立名為
NewSAMLIssuanceA的新 SAML 發放樣板,複製SAMLIssuanceA。 -
更新
NewRPprofileA以參照NewSAMLIssuanceASAML 2.0 發行樣板。 - 更新「安全」頁籤中的
NewSAMLIssuanceASAML 2.0 發放樣板,以使用新的金鑰項目。 -
瀏覽至安全性權杖服務、合作夥伴、信賴方。
-
開啟 RP1 並將其設定為使用
NewRPprofileA信賴方設定檔:然後 OSTS 會使用新的金鑰項目saml-signing來登出 RP1 信賴方合作夥伴的 SAML 2.0 宣告。 - 開啟瀏覽器並使用下列 URL 產生 PEM 格式的憑證,從 OSTS 下載新憑證。
-
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 Help Center 。
Key and Certificate Management-Rollover in OAM and STS
F61370-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.