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

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

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

在 IAM 主控台中建立 OpenID Connect (OIDC) 身分識別提供者時,您必須提供指紋。IAM 需要頂層中繼憑證授權機構 (CA) 的指紋,該授權機構會簽署外部身分提供者 (IdP) 使用的憑證。指紋是 CA 憑證的簽章,該簽章會用來發出與 OIDC 相容的 IdP 憑證。當您建立 IAM OIDC 身分識別提供者時,您信任該 IdP 驗證的身分可存取您的. AWS 帳戶透過提供 CA 的憑證指紋,您信任該 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 身分識別提供者時,主控台會嘗試為您擷取指紋。我們建議您也手動取得 OIDC IdP 的指紋,並確認主控台擷取了正確的指紋。如需取得憑證指紋的相關資訊,請參閱下列各節。

取得憑證指紋

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

注意

AWS 透過我們受信任的根憑證授權單位 (CAIdPs) 程式庫保護某些 OIDC 身分識別提供者 () 的通訊,而不是使用憑證指紋來驗證您的 IdP 伺服器憑證。在這些情況下,舊式指紋會保留在您的組態中,但不再用於驗證。這些 OIDC IdPs 包括 Auth0、、 GitHub GitLab、谷歌和那些使用 Amazon S3 儲存貯體託管 JSON 網頁金鑰集 (JWKS) 端點的使用者。

取得 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 適用的工具或 IAM API 建立 IAM OIDC 身分識別提供者 PowerShell,請在建立提供者時提供此指紋。 AWS CLI

    如果是在 IAM 主控台中建立 IAM OIDC 身分提供者,請在建立 OIDC 提供者時,比較此指紋與主控台之 Verify Provider Information (驗證提供者資訊) 頁面上所顯示的指紋。

    重要

    如果您取得的指紋與您在主控台中看到的指紋不相符,則不應該在主控台中建立該 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 文件。