

# OpenID Connect ID プロバイダーのサムプリントを取得する
<a name="id_roles_providers_create_oidc_verify-thumbprint"></a>

IAM で [OpenID Connect (OIDC) ID プロバイダーを作成する](id_roles_providers_create_oidc.md) 場合は、IAM では、外部 ID プロバイダー (IdP) が使用する証明書に署名した最上位の中間認証局 (CA) のサムプリントが必要です。拇印は、OIDC 互換 IdPの証明書を発行するために使用された CAの 証明書の署名です。IAM の OIDC ID プロバイダーを作成する場合、その IdP からの ID を信頼し、AWS アカウント へのアクセス権限を与えることになります。CA の証明書のサムプリントを使用することにより、CA によって発行された証明書を、登録されているものと同じ DNS 名で信頼します。これにより、IdP の署名証明書を更新したときに各アカウントの信頼を更新する必要がなくなります。

**重要**  
ほとんどの場合、フェデレーションサーバーは 2 つの異なる証明書を使用します。  
1 つ目は、AWS と IdP との間に HTTPS 接続を確立します。この証明書は、AWS Certificate Manager などのよく知られたパブリックルート CA で発行されています。これにより、クライアントは証明書の信頼性とステータスを確認できます。
2 つ目はトークンの暗号化に使用され、プライベートまたはパブリックのルート CA によって署名されているはずです。

IAM OIDC IDプロバイダーは、[AWS Command Line Interface、Tools for Windows PowerShell、またはIAM API ](id_roles_providers_create_oidc.md#manage-oidc-provider-cli)を使用して作成できます これらの方法を使用する場合、サムプリントを手動で指定できます。サムプリントを含めない場合、IAM は OIDC IdP サーバー証明書の最上位中間 CA サムプリントを取得します。サムプリントを含める場合は、サムプリントを手動で取得して AWS に提供する必要があります。

[IAM コンソール](id_roles_providers_create_oidc.md) を使用して OIDC ID プロバイダーを作成すると、IAM は、OIDC IdP サーバー証明書の最上位中間 CA サムプリントの取得を試みます。

あわせて、OIDC IdP のサムプリントを手動で取得し、IAM で正しいサムプリントが取得されていることを確認することをお勧めします。証明書のサムプリントの取得の詳細については、以下のセクションを参照してください。

**注記**  
AWS は、JSON Web Key Set (JWKS) エンドポイントの TLS 証明書を検証する信頼されたルート認証機関 (CA) のライブラリを使用して、OIDC ID プロバイダー (IdP) との通信を保護します。ご使用の OIDC IdP がこれらの信頼された CA のいずれかによる署名を受けていない証明書を信頼する場合、その IdP の設定で指定されたサムプリントを使用して通信を保護します。TLS 証明書を取得できない場合、または TLS v1.3 が必要な場合は、AWS はサムプリントの検証にフォールバックします。

**重要**  
OIDC ID プロバイダーが検出エンドポイント (発行元 URL) と JWKS エンドポイント (`jwks_uri`) に異なるホストを使用する場合、OIDC プロバイダーのサムプリントリストに両方のエンドポイントのサムプリントを含める必要があります。AWS は、サムプリント検証にフォールバックするときに、両方のエンドポイントのサムプリントを検証します。設定されたリストにいずれかのサムプリントがない場合、認証は失敗します。  
ほとんどの OIDC プロバイダーは両方のエンドポイントを同じドメインでホストするため、1 つのサムプリントで両方をカバーします。プロバイダーが 2 つのエンドポイントにそれぞれ異なるホストまたは証明書を使用している場合のみ、別のサムプリントを追加する必要があります。

## 証明書サムプリントを取得する
<a name="oidc-obtain-thumbprint"></a>

OIDC プロバイダーの証明書サムプリントを取得するには、ウェブブラウザと OpenSSL コマンドラインツールを使用します。ただし、IAM OIDC ID プロバイダーを作成するために証明書のサムプリントを手動で取得する必要はありません。次の手順を使用して、OIDC プロバイダーの証明書サムプリントを取得できます。

**OIDC IdP のサムプリントを取得するには**

1. OIDC IdP のサムプリントを取得する前に、OpenSSL コマンドラインツールを取得する必要があります。このツールを使用して、OIDC IdP の証明書チェーンをダウンロードし、証明書チェーンで最終的な証明書のサムプリントを作成します。OpenSSL のインストールと設定が必要な場合は、「[OpenSSL のインストール](#oidc-install-openssl)」および「[OpenSSL の設定](#oidc-configure-openssl)」の手順に従います。

1. <a name="thumbstep2"></a>次のように、OIDC IdP の URL (`https://server.example.com` など) で開始し、`/.well-known/openid-configuration` を追加して IdP の設定ドキュメントの URL (以下参照) を作成します。

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

   この URL をウェブブラウザで開き、{{server.example.com}} を IdP のサーバー名に置き換えます。

1. <a name="thumbstep3"></a>表示されたドキュメントで、ウェブブラウザを使用します。**検索**機能を使用して、テキスト `"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",
   ...
   ```
**注記**  
検出エンドポイントと JWKS エンドポイントが異なるホストを使用する場合は、発行元 URL の完全修飾ドメイン名 ([Step 2](#thumbstep2) で使用した URL、`/.well-known/openid-configuration` パスなし) をメモします。このドメインがこのステップでコピーした `jwks_uri` ドメインと異なる場合は、両方のドメインに対して [Step 4](#thumbstep4)～[Step 6](#thumbstep6) を実行し、OIDC プロバイダーを作成するときに両方のサムプリントを含めます。

1. <a name="thumbstep4"></a>OpenSSL コマンドラインツールを使用して、次のコマンドを実行します。{{keys.example.com}} を、[Step 3](#thumbstep3) で取得したドメイン名に置き換えます。

   ```
   openssl s_client -servername {{keys.example.com}} -showcerts -connect {{keys.example.com}}:443
   ```

1. <a name="thumbstep5"></a>コマンドウィンドウで、次の例のような証明書が表示されるまでスクロールアップします。複数の証明書が表示される場合は、表示される最後 (コマンド出力の最後) の証明書を見つけます。これには認証機関チェーンの最上位中間 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 ID プロバイダーの証明書チェーンは、ドメインまたは発行者 URL で始まり、中間証明書 (存在する場合) が含まれ、ルート証明書で終わる必要があります。証明書チェーンの順序が異なる場合、または証明書の重複や追加が含まれる場合は、署名の不一致エラーが表示され、STS は JSON ウェブトークン (JWT) の検証に失敗します。エラーを解決するには、サーバーから返されたチェーン内の証明書の順序を修正します。証明書チェーン標準の詳細については、RFC Series ウェブサイトの [RFC 5246 の certificate\_list](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.2) を参照してください。

1. <a name="thumbstep6"></a>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
   ```
**注記**  
検出エンドポイントが JWKS エンドポイントとは別のホストを使用している場合は、検出エンドポイントドメイン (発行元 URL ドメイン) を使用して [Step 4](#thumbstep4)～[Step 6](#thumbstep6) を繰り返します。[CreateOpenIDConnectProvider](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html) または [UpdateOpenIDConnectProviderThumbprint](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateOpenIDConnectProviderThumbprint.html) を使用して OIDC ID プロバイダーを作成または更新する場合は、両方のサムプリントを含めます。

1. AWS CLI を使用して IAM OIDC ID プロバイダーを作成する場合は、Windows PowerShell 用ツール、または IAM API では、サムプリントの提供は任意です。作成時にサムプリントを含めない場合、IAM は OIDC IdP サーバー証明書の最上位中間 CA サムプリントを取得します。IAM OIDC ID プロバイダーを作成したら、このサムプリントを IAM によって取得されたサムプリントと比較できます。

   IAM コンソールで IAM OIDC ID プロバイダーを作成する場合、コンソールは OIDC IdP サーバー証明書の上位中間 CA サムプリントの取得を試みます。このサムプリントを IAM によって取得されたサムプリントと比較できます。IAM OIDC ID プロバイダーが作成されたら、OIDC プロバイダーの **[概要]** コンソールページの **[エンドポイント検証]** タブで IAM OIDC ID プロバイダーのサムプリントを表示できます。
**重要**  
取得したサムプリントが、IAM OIDC ID プロバイダーに表示されるサムプリントに一致しない場合は、その OIDC プロバイダーを作成しないでください。代わりに、作成した OIDC プロバイダーを削除してから、しばらく待ってから OIDC プロバイダーの作成を再試行してください。プロバイダーを使用する前に、サムプリントが一致していることを確認します。再試行してもサムプリントが一致しない場合は、[IAM フォーラム](https://forums.aws.amazon.com/forum.jspa?forumID=76)を使用して AWS にお問い合わせください。

## OpenSSL のインストール
<a name="oidc-install-openssl"></a>

まだ OpenSSL がインストールされていない場合は、このセクションの手順に従います。

**Linux または Unix で OpenSSL をインストールするには**

1. [OpenSSL: ソース、Tarballs](https://openssl.org/source/)(https://openssl.org/source/) にアクセスします。

1. 最新のソースをダウンロードし、パッケージを構築します。

**Windows へ OpenSSL をインストールするには**

1. [OpenSSL: バイナリディストリビューション](https://wiki.openssl.org/index.php/Binaries)(https://wiki.openssl.org/index.php/Binaries) にアクセスして、Windows バージョンをインストールできるサイトの一覧を参照してください。

1. 選択したサイトの指示に従って、インストールを開始します。

1. **Microsoft Visual C\+\+ 2008 再頒布可能パッケージ**をインストールするように求められ、それがまだシステムにインストールされていない場合は、ご使用の環境に適したダウンロードリンクを選択してください。「**Microsoft Visual C\+\+ 2008 再配布可能セットアップウィザード**」の指示に従ってください。
**注記**  
Microsoft Visual C\+\+ 2008 再頒布可能ファイルがシステムに既にインストールされているかどうかわからない場合は、最初に OpenSSL をインストールしてみてください。Microsoft Visual C\+\+ 2008 再頒布可能ファイルがまだインストールされていない場合、OpenSSL インストーラーに警告が表示されます。インストールする OpenSSL のバージョンと一致するアーキテクチャ (32 ビットまたは 64 ビット) をインストールすることを確認します。

1. Microsoft Visual C\+\+ 2008 再頒布可能ファイルをインストールしたら、ご使用の環境に適したバージョンの OpenSSL バイナリを選択し、ファイルをローカルに保存します。**OpenSSL のセットアップウィザード**を起動します。

1. 「**OpenSSL のセットアップウィザード**」の指示に従ってください。

## OpenSSL の設定
<a name="oidc-configure-openssl"></a>

OpenSSL コマンドを使用する前に、OpenSSL がインストールされている場所に関する情報が含まれるように、オペレーティングシステムを構成する必要があります。

**Linux または Unix で OpenSSL を設定するには**

1. コマンドラインで、`OpenSSL_HOME` 変数を OpenSSL のインストール場所に設定します。

   ```
   $ export OpenSSL_HOME={{path_to_your_OpenSSL_installation}}
   ```

1. OpenSSL インストールを含めるパスを設定します。

   ```
   $ export PATH=$PATH:$OpenSSL_HOME/bin
   ```
**注記**  
`export` コマンドを使用して環境変数に加えた変更は、現在のセッションでのみ有効です。環境変数をシェル設定ファイルで設定することで、環境変数に永続的な変更を加えることができます。詳細については、「インスタンスのオペレーティングシステムに関するドキュメント」を参照してください。

**Windows での OpenSSL を設定するには**

1. [**コマンドプロント**] ウィンドウを開きます。

1. `OpenSSL_HOME` 変数を OpenSSL のインストール場所に設定します。

   ```
   C:\> set OpenSSL_HOME={{path_to_your_OpenSSL_installation}}
   ```

1. `OpenSSL_CONF` 変数を OpenSSL インストールの設定ファイルの場所に設定します。

   ```
   C:\> set OpenSSL_CONF={{path_to_your_OpenSSL_installation}}\bin\openssl.cfg
   ```

1. OpenSSL インストールを含めるパスを設定します。

   ```
   C:\> set Path=%Path%;%OpenSSL_HOME%\bin
   ```
**注記**  
**コマンドプロンプト**ウィンドウで Windows 環境変数に加えた変更は、現在のコマンドラインセッションでのみ有効です。環境変数をシステムプロパティとして設定することで、環境変数を永続的に変更することができます。正確な手順は、使用している Windows のバージョンによって異なります。（たとえば、Windows 7では、[**コントロールパネル**]、[**システムとセキュリティ**]、[**システム**]の順に開きます。次に、[**システムの詳細設定**]、[**詳細設定**]タブ、[**環境変数**]を選択します。） 詳細については、「Windows ドキュメント」を参照してください。