取得 OpenID Connect 身分識別提供者的指紋 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

取得 OpenID Connect 身分識別提供者的指紋

當您在 IAM 中建立 OpenID Connect (OIDC) 身分識別提供者時,IAM 需要針對簽署外部身分識別提供者 (IdP) 所使用之憑證的頂級中繼憑證授權單位 (CA) 提供指紋。指紋是 CA 憑證的簽章,該簽章會用來發出與 OIDC 相容的 IdP 憑證。當您建立 IAM OIDC 身分識別提供者時,您信任該 IdP 驗證的身分可存取您的. AWS 帳戶藉由使用 CA 的憑證指紋,您可以信任該 CA 所發行的任何憑證,其 DNS 名稱與已註冊的憑證相同。這讓您在續約 IdP 的簽署憑證時,無需在每個帳戶中更新信任。

重要

在大多數情況下,聯合伺服器會使用兩個不同的憑證:

  • 第一個會在 AWS 和您的 IdP 之間建立 HTTPS 連線。這應該由知名的公共根 CA 發行,例如 AWS Certificate Manager。這可讓用戶端檢查憑證的可靠性和狀態。

  • 第二個憑證用於加密令牌,且應由私有或公有 CA 簽署。

您可以使用AWS Command Line Interface、適用於 Windows PowerShell 的工具或 IAM API 建立 IAM OIDC 身分識別提供者。使用這些方法時,您可以選擇手動提供指紋。如果您選擇不包含指紋,IAM 將擷取 OIDC IdP 伺服器憑證的最上層中繼 CA 指紋。如果您選擇包含指紋,您必須手動取得指紋並將其提供給。 AWS

當您使用 IAM 主控台建立 OIDC 身分識別提供者時,IAM 會嘗試為您擷取 OIDC IdP 伺服器憑證的最上層中繼 CA 指紋。

我們建議您也手動取得 OIDC IdP 的指紋,並驗證 IAM 擷取正確的指紋。如需取得憑證指紋的相關資訊,請參閱下列各節。

注意

AWS 使用我們受信任的根憑證授權單位 (CAIdPs) 程式庫來確保與 OIDC 身分提供者 () 的通訊安全,以驗證 JSON 網頁金鑰集 (JWKS) 端點的 TLS 憑證。如果您的 OIDC IdP 依賴於未由這些受信任 CA 之一簽署的憑證,則只有這樣我們才會使用 IdP 組態中設定的指紋來保護通訊安全。 AWS 如果我們無法檢索 TLS 證書或者需要 TLS v1.3,則將退回指紋驗證。

取得憑證指紋

您可以使用網頁瀏覽器和 OpenSSL 命令列工具來取得 OIDC 提供者的憑證指紋。不過,您不需要手動取得憑證指紋即可建立 IAM OIDC 身分識別提供者。您可以使用下列程序來取得 OIDC 提供者的憑證指紋。

取得 OIDC IdP 的指紋
  1. 您需要先取得 OpenSSL 命令列工具,然後才能取得 OIDC IdP 的指紋。您可使用此工具下載 OIDC IdP 憑證鍊並產生憑證連結中最終憑證的指紋。如果您需要安裝和設定 OpenSSL,請根據 安裝 OpenSSL設定 OpenSSL 中的說明操作。

  2. 從 OIDC IdP URL 開始 (例如,https://server.example.com),然後新增 /.well-known/openid-configuration 以組成該 IdP 的組態文件的 URL,如下所示:

    https://server.example.com/.well-known/openid-configuration

    在 Web 瀏覽器中開啟此 URL,並將 server.example.com 取代為 IdP 的伺服器名稱。

  3. 在顯示的文件中,使用您的 web 瀏覽器 Find (尋找) 功能來尋找文字 "jwks_uri"。文字 "jwks_uri" 後面會有一個冒號 (:),然後是一個 URL。複製 URL 的完整網域名稱。不包括 https:// 或在頂層網域後的任何路徑。

    { "issuer": "https://accounts.example.com", "authorization_endpoint": "https://accounts.example.com/o/oauth2/v2/auth", "device_authorization_endpoint": "https://oauth2.exampleapis.com/device/code", "token_endpoint": "https://oauth2.exampleapis.com/token", "userinfo_endpoint": "https://openidconnect.exampleapis.com/v1/userinfo", "revocation_endpoint": "https://oauth2.exampleapis.com/revoke", "jwks_uri": "https://www.exampleapis.com/oauth2/v3/certs", ...
  4. 使用 OpenSSL 命令列工具來執行以下命令。將 keys.example.com 取代為您在步驟 3 中取得的網域名稱。

    openssl s_client -servername keys.example.com -showcerts -connect keys.example.com:443
  5. 在命令視窗中向上滾動,直至看到類似於以下範例的憑證。如果您看到多個憑證,請找到顯示的最後一個憑證 (在命令輸出末尾)。這包含憑證授權機構鏈中的頂層中繼 CA 憑證。

    -----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----

    複製憑證 (包括 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 行) 並將其貼上文字檔中。接著儲存檔案,並將其命名為 certificate.crt

    注意

    OIDC 身分識別提供者的憑證鏈結必須以網域或簽發者 URL 開頭,然後是中繼憑證,並以根憑證結束。如果憑證鏈結順序不同或包含重複或其他憑證,則您會收到簽章不符錯誤,且 STS 無法驗證 JSON Web Token (JWT)。更正伺服器傳回之鏈結中憑證的順序,以解決錯誤。如需有關憑證鏈標準的詳細資訊,請參閱 RFC 系列網站上 RFC 5246 中的憑證清單。

  6. 使用 OpenSSL 命令列工具來執行以下命令。

    openssl x509 -in certificate.crt -fingerprint -sha1 -noout

    您的命令視窗將顯示類似於以下範例的憑證指紋:

    SHA1 Fingerprint=99:0F:41:93:97:2F:2B:EC:F1:2D:DE:DA:52:37:F9:C9:52:F2:0D:9E

    從此字串中去掉冒號 (:) 字元以產生最終指紋,如:

    990F4193972F2BECF12DDEDA5237F9C952F20D9E
  7. 如果您要使用 Windows PowerShell 適用的工具或 IAM API 建立 IAM OIDC 身分識別提供者,則可選擇提供指紋。 AWS CLI如果您在建立期間選擇不包含指紋,IAM 將擷取 OIDC IdP 伺服器憑證的最上層中繼 CA 指紋。建立 IAM OIDC 身分識別提供者之後,您可以將此指紋與 IAM 擷取的指紋進行比較。

    如果您要在 IAM 主控台中建立 IAM OIDC 身分識別提供者,則主控台會嘗試為您擷取 OIDC IdP 伺服器憑證的頂級中繼 CA 指紋。您可以將此指紋與 IAM 擷取的指紋進行比較。建立 IAM OIDC 身分識別提供者之後,您可以在 OIDC 提供者摘要主控台頁面的端點驗證索引標籤中,檢視 IAM OIDC 身分識別提供者的指紋。

    重要

    如果您取得的指紋與您在 IAM OIDC 身分識別提供者指紋詳細資料中看到的指紋不符,則不應使用 OIDC 提供者。相反地,您應該刪除建立的 OIDC 提供者,然後在一段時間過後再次嘗試建立 OIDC 提供者。在使用提供者之前,請先確認指紋相符。如果這些指紋在第二次嘗試後仍然不相符,則請使用 IAM 論壇與 AWS聯絡。

安裝 OpenSSL

如果您尚未安裝 OpenSSL,請遵循此節中的說明操作。

在 Linux 或 Unix 上安裝 OpenSSL
  1. 移至 OpenSSL: Source, Tarballs (https://openssl.org/source/)。

  2. 下載最新來源並建置套件。

在 Windows 安裝 OpenSSL
  1. 請前往 OpenSSL: Binary Distributions (https://wiki.openssl.org/index.php/Binaries),以取得您可以從中安裝 Windows 版本的網站清單。

  2. 依照您所選網站上的指示開始安裝。

  3. 如果系統要求您安裝 Microsoft Visual C++ 2008 可轉散發套件,並且您的系統上尚未安裝此版本,請選擇適合您環境的下載連結。請遵照 Microsoft Visual C++ 2008 可轉散發套件安裝精靈所提供的指示執行。

    注意

    如果您不確定 Microsoft Visual C++ 2008 可轉散發套件是否已經安裝在您的系統上,您可以嘗試先安裝 OpenSSL。如果尚未安裝 Microsoft Visual C++ 2008 可轉散發套件,則 OpenSSL 安裝程式將會顯示提醒。請確定您安裝的架構 (32 位元或 64 位元) 符合您所安裝的 OpenSSL 版本。

  4. 安裝 Microsoft Visual C++ 2008 可轉散發套件後,請選取適用於您環境的 OpenSSL 二進位檔版本並將檔案儲存在本機。啟動 OpenSSL 安裝精靈

  5. 遵循 OpenSSL 安裝精靈中所述的指示。

設定 OpenSSL

在使用 OpenSSL 命令之前,您必須先設定作業系統,使其具有 OpenSSL 安裝位置的相關資訊。

在 Linux 或 Unix 上設定 OpenSSL
  1. 在命令列,將 OpenSSL_HOME 變數設定為 OpenSSL 安裝的位置:

    $ export OpenSSL_HOME=path_to_your_OpenSSL_installation
  2. 設定要包含 OpenSSL 安裝的路徑:

    $ export PATH=$PATH:$OpenSSL_HOME/bin
    注意

    您使用 export 命令對環境變數做出的任何變更,僅適用於目前的工作階段。您可以在 shell 組態檔案中設定環境變數,對環境變數進行持續變更。如需詳細資訊,請參閱適用於您作業系統的文件。

在 Windows 上設定 OpenSSL
  1. 開啟命令提示視窗。

  2. OpenSSL_HOME 變數設定為 OpenSSL 安裝的位置:

    C:\> set OpenSSL_HOME=path_to_your_OpenSSL_installation
  3. OpenSSL_CONF 變數設定為 OpenSSL 安裝中組態檔案的位置:

    C:\> set OpenSSL_CONF=path_to_your_OpenSSL_installation\bin\openssl.cfg
  4. 設定要包含 OpenSSL 安裝的路徑:

    C:\> set Path=%Path%;%OpenSSL_HOME%\bin
    注意

    您在命令提示視窗中對 Windows 環境變數做出的任何變更,僅適用於目前命令列工作階段。您可以將環境變數設定為系統屬性,對環境變數進行持續變更。確切的程序將取決於您索使用的 Windows 版本。(例如,在 Windows 7 中,開啟控制面板系統與安全系統。 然後選擇進階系統設定進階索引標籤、環境變數。) 如需詳細資訊,請參閱 Windows 文件。