OAM 和 STS 中的金鑰與憑證管理與輪換

簡介

作為聯盟和 WS-Trust 通訊協定互動的一部分,OAM/OSTS 需要透過數位簽章與數位加密,使用 PKI 金鑰與憑證進行非否認和完整性。

本文探討「金鑰」和「憑證」管理,包括如何:

在聯合 /WS-Trust 交換中,會發生下列情況:

含 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/OSTS 中使用新的 PKI 金鑰與憑證前,請先建立這些金鑰與憑證的程序需要兩倍:

注意:必須將金鑰和憑證儲存在 .oamkeystore;不支援 HSM。

在 .oamkeystore 中建立新金鑰項目

如前所述,管理員無法辨識 .oamkeystore 金鑰存放區的密碼,必須重設才能進行修改。此作業是透過 WLST 命令來完成:

  1. 執行以下步驟來輸入 WLST 環境:$IAM_ORACLE_HOME/common/bin/wlst.sh

  2. 連線「WLS 管理」伺服器:connect()

  3. 瀏覽至「網域程式實際執行」分支:domainRuntime()

  4. 重設 .oamkeystore 密碼:resetKeystorePassword()

  5. 結束 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 金鑰項目:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-adminport/oamconsole

  2. 瀏覽至組態同盟設定值或安全權杖服務設定值

  3. 建立新項目:

    1. 在「金鑰存放區」區段中,按一下 "+" 按鈕。

    2. 輸入新項目的 KeyID (例如 saml-signing)。

    3. 從列出 .oamkeystore 中索引鍵項目的下拉式清單中,選取新索引鍵項目的別名 (例如 samlsigning)。

    4. 輸入您在上一個區段中建立該金鑰時,所設定之關鍵碼項目的密碼。

    5. 視需要為其他項目重複此程序。

  4. 按一下套用

Federation_Settings.jpg 圖解說明

注意:不同的金鑰 ID 可參照「OAM 金鑰存放區」中的相同金鑰項目

使用新金鑰項目

全域設定值

若要更新全域 OAM 設定值以使用新金鑰和憑證來簽署和解密 SAML 訊息,請執行下列作業:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-admin-port/oamconsole

  2. 瀏覽至組態聯合設定值

  3. 從金鑰項目的下拉式清單中選取「簽署金鑰」(這些項目是在「金鑰存放區」區段中定義)。例如,選取 saml-signing

  4. 從金鑰項目的下拉式清單中選取「加密金鑰」(這些項目是在「金鑰存放區」區段中定義)。例如,選取 saml-encryption

  5. 按一下套用

注意:申請之後,您可能需要將憑證和 / 或 SAML 2.0 中繼資料重新分配給合作夥伴)

Global_Settings.jpg 圖解說明

若要更新全域 OSTS 設定值以使用新金鑰和憑證來解密 SAML 訊息,請執行下列作業:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-adminport/oamconsole

  2. 瀏覽至組態Security Token Service 設定值

  3. 從金鑰項目的下拉式清單中選取「預設加密樣板」(這些項目是在「金鑰存放區」區段中定義)。例如,選取 samlencryption

  4. 按一下套用

備註:申請之後,您可能需要將憑證重新配銷給夥伴

Security_Token_Service_Settings.jpg 圖解說明

若要更新 OSTS 設定值以使用新金鑰和憑證簽署 SAML 訊息,請執行下列作業:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-admin- port/oamconsole

  2. 瀏覽至 Security Token ServiceToken Issuance 範本

  3. 按一下要更新的「SAML 發放樣板」。

  4. 按一下安全性頁籤

  5. 從金鑰項目的下拉式清單中選取簽署金鑰存放區存取樣板 ID (這些項目定義於「金鑰存放區」區段)。例如,選取 saml-signing

  6. 按一下套用

備註:申請之後,您可能需要將憑證重新配銷給夥伴

Issuance_Template.jpg 圖解說明

每個合作夥伴的索引鍵變換

OAM/OSTS 部署涉及許多合作夥伴時,可能難以一次變更全域簽署 / 加密金鑰 / 憑證,因為這需要在變更的同時通知所有合作夥伴,並讓他們使用新的憑證 /SAML 2.0 描述資料更新組態。

注意:更新 OAM/OSTS 中的金鑰 / 憑證之後,「聯合 /WS- 信任」流程必須等到合作夥伴將新憑證上傳到系統內,才能與合作夥伴合作。

OAM/OSTS 提供了一個簡單的方法,以每個合作夥伴為基礎執行金鑰變換,讓 OAM 管理員能夠規劃如何及何時通知特定合作夥伴金鑰和憑證變更。

注意:您可以在 OAM 組態中使用「夥伴設定檔」,透過一組合作夥伴來完成 OAM 金鑰變換。

OAM 金鑰輪換

為特定合作夥伴執行金鑰變換時,您必須先透過 WLST 命令更新 OAM 中的 IdP 或 SP Partner 組態:

  1. 執行以下步驟來輸入 WLST 環境:$IAM_ORACLE_HOME/common/bin/wlst.sh

  2. 連線「WLS 管理」伺服器:connect()

  3. 瀏覽至「網域程式實際執行」分支:domainRuntime()

  4. 更新夥伴組態,將「簽署金鑰」特性 (由 signingkeystoreaccesstemplateid 參照) 設為「聯合設定值」和「金鑰存放區」區段中定義的金鑰項目 ID (在此範例中,saml-signing 是金鑰項目 ID;將 <PARTNER_NAME> 取代為 OAM 中夥伴的名稱;將 <IDP_OR_SP> 取代為 IDP 或 SP (夥伴類型):

  5. updatePartnerProperty("<PARTNER_NAME>", "<IDP_OR_SP>","signingkeystoreaccesstemplateid", "saml-signing", "string")
    
  6. 更新夥伴組態,將「加密金鑰」特性 (由 encryptionkeystoreaccesstemplateid 參照) 設為「聯合設定值」,「金鑰存放區」區段中定義的金鑰項目 ID (在此範例中,saml-encryption 是金鑰項目 ID;將 <PARTNER_NAME> 取代為 OAM 中夥伴的名稱;將 <IDP_OR_SP> 取代為 IDP 或 SP,即夥伴類型):
  7. updatePartnerProperty("<PARTNER_NAME>", "<IDP_OR_SP>", "encryptionkeystoreaccesstemplateid", "saml-encryption", "string")
    
  8. 結束 WLST 環境:exit()

夥伴組態更新之後,就必須使用 SAML 2.0 描述資料或憑證資訊。若要產生此資訊:

範例:http://oam.com/oamfed/idp/cert?id=saml-signing

注意:您可以先產生 SAML 2.0 描述資料 / 憑證,然後先提供給夥伴,再更新夥伴組態。

OSTS 金鑰變換

若要說明 OSTS 金鑰變換,請採取下列範例:

換用包含先切換 RP1,再切換 RP2,然後切換為 RP3,讓這些合作夥伴使用新的 saml-signing 憑證。

若要切換 RP1,必須執行下列作業:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-admin- port/oamconsole

  2. 瀏覽至安全性權杖服務合作夥伴資料檔信賴方資料檔

  3. 建立名為 NewRPprofileA 的新信賴方設定檔,副本為 RPprofileA

  4. 瀏覽至 Security Token ServiceToken Issuance 範本

  5. 建立名為 NewSAMLIssuanceA 的新 SAML 發放樣板,複製 SAMLIssuanceA

  6. 更新 NewRPprofileA 以參照 NewSAMLIssuanceA SAML 2.0 發行樣板。

  7. New_RPProfile_A.jpg 圖解說明

  8. 更新「安全」頁籤中的 NewSAMLIssuanceA SAML 2.0 發放樣板,以使用新的金鑰項目。
  9. New_SAMLIssuanceA.jpg 圖解說明

  10. 瀏覽至安全性權杖服務合作夥伴信賴方

  11. 開啟 RP1 並將其設定為使用 NewRPprofileA 信賴方設定檔:然後 OSTS 會使用新的金鑰項目 saml-signing 來登出 RP1 信賴方合作夥伴的 SAML 2.0 宣告。

  12. Configure_RP1.jpg 圖解描述

  13. 開啟瀏覽器並使用下列 URL 產生 PEM 格式的憑證,從 OSTS 下載新憑證。
  14. http://oam-runtime-host:oam-runtime-port/sts/servlet/samlcert?id=<KEYENTRY_ID>

  15. ID 查詢參數包含憑證的金鑰項目 ID。

  16. 取代 <KEYENTRY_ID>

  17. 範例:http://oam.com/sts/servlet/samlcert?id=saml-signing

  18. 向合作夥伴提供憑證。

將 RP2 切換至新憑證將更快,因為已建立新的信賴方設定檔和 SAML 發行範本。

若要切換 RP2,必須執行下列作業:

  1. 前往「OAM 管理主控台」:http(s)://oam-admin-host:oam-adminport/oamconsole

  2. 瀏覽至安全性權杖服務合作夥伴信賴方

  3. 開啟 RP1 並將其設定為使用 NewRPprofileA 信賴方設定檔:然後 OSTS 會使用新的金鑰項目 saml-signing 來登出 RP1 信賴方合作夥伴的 SAML 2.0 宣告。

  4. 向合作夥伴提供憑證。

將 RP3 切換至新憑證包含重複執行 RP1 的作業,因為尚未建立 RP3 的新信賴方設定檔和 SAML 發放樣板。

注意:您可以在更新 OSTS 組態之前,先將新憑證提供給夥伴。

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,瀏覽 education.oracle.com/learning-explorer 成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center