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

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

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

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

重要

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

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

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

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

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

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

注意

AWS 使用我們的受信任根憑證授權方程式庫 (IdPs) 保護與OIDC身分提供者 (CAs) 的通訊,以驗證 JSON Web 金鑰集 (JWKS) 端點的TLS憑證。如果您的 OIDC IdP 依賴的憑證不是由這些受信任的 之一簽署CAs,則我們只會使用 IdP 組態中設定的指紋來確保通訊安全。如果我們無法擷取TLS憑證或需要 TLS v1.3,則 AWS 會返回指紋驗證。

取得憑證指紋

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

取得 IdP OIDC 的指紋
  1. 在取得 OIDC IdP 的指紋之前,您需要取得開啟SSL命令列工具。您可以使用此工具下載 OIDC IdP 憑證鏈,並在憑證鏈中產生最終憑證的指紋。如果您需要安裝和設定開啟 SSL,請遵循 安裝開啟SSL和 的指示設定開啟SSL

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

    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. 使用開啟SSL命令列工具執行下列命令。Replace (取代) 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 權杖 (JWT)。更正從伺服器傳回之鏈中的憑證順序,以解決錯誤。如需憑證鏈標準的詳細資訊,請參閱 RFC 系列網站上的 RFC 5246 中的 certificate_list

  6. 使用開啟SSL命令列工具執行下列命令。

    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. 如果您要使用 AWS CLI、適用於 Windows 的工具 PowerShell或 IAM 建立IAMOIDC身分提供者API,則提供指紋是選用的。如果您選擇在建立期間不包含指紋, IAM將擷取 IdP 伺服器憑證的頂部中繼 CA OIDC 指紋。建立IAMOIDC身分提供者之後,您可以將此指紋與 擷取的指紋進行比較IAM。

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

    重要

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

安裝開啟SSL

如果您尚未安裝 OpenSSL,請遵循本節中的指示。

在 Linux 或 Unix 上安裝 OpenSSL
  1. 前往開啟 SSL:Source、Tarballs (https://openssl.org/source/)。

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

在 Windows 上安裝 OpenSSL
  1. 前往開啟 SSL:二進位分佈 (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 Redistributables,OpenSSL 安裝程式會顯示警示。請確定您安裝的架構 (32 位元或 64 位元) 與您安裝的 OpenSSL 版本相符。

  4. 安裝 Microsoft Visual C++ 2008 Redistributables 之後,請為您的環境選取適當的開啟SSL二進位檔版本,並在本機儲存檔案。啟動 OpenSSL Setup Wizard

  5. 請遵循 OpenSSL Setup Wizard 中所述的指示。

設定開啟SSL

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

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

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

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

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

若要設定 Windows 上的開啟SSL
  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 文件。