Amazon API Gateway カスタムドメイン名に対して API リクエストを実行しようとしましたが、正しくない証明書が返されました。これを修正するにはどうすればよいですか?
簡単な説明
API ゲートウェイ API 用に作成できるカスタムドメイン名には、リージョン または (REST API のみ) エッジ最適化の 2 種類があります。
リージョンレベルのカスタムドメイン名の場合、API Gateway はリージョンレベルのドメイン名を作成します。カスタムドメイン名を「d-example.execute-api.<region>.amazonaws.com」のようなホスト名にマッピングするには、DNS レコードを設定する必要があります。
エッジ最適化カスタムドメイン名の場合、API Gateway は Amazon CloudFront ディストリビューションを作成します。カスタムドメイン名を「distribution-id.cloudfront.net」のような CloudFront ディストリビューション名にマッピングするには、DNS レコードを設定する必要があります。
次のシナリオでは、SSL 証明書 *.example.com または www.example.com がカスタムドメイン名 www.example.com にアップロードされています。www.example.com に対する API リクエストは、次のようなエラーを返します。
ブラウザから:
「This server could not prove that it is www.example.com; its security certificate is from *.execute-api.us-east-1.amazonaws.com.This may be caused by a misconfiguration or an attacker intercepting your connection.」(このサーバーは、自らが www.example.com であることを証明できませんでした。セキュリティ証明書は *.execute-api.us-east-1.amazonaws.com からのものです。これは、設定ミスまたは攻撃者が接続を傍受したことが原因である可能性があります。)
curl から:
「curl: (60) SSL: no alternative certificate subject name matches target hostname 'www.example.com'. curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it.To learn more about this situation and how to fix it, please visit the web page mentioned above.」(curl: (60) SSL: ターゲットのホスト名「www.example.com」に一致する代替証明書のサブジェクト名はありません。curl はサーバーの正当性を検証できなかったため、そのサーバーへの安全な接続を確立できませんでした。この状況および解決方法の詳細については、上記のウェブページをご覧ください。)
解決方法
カスタムドメイン名の CNAME または A レコードが API Gateway のドメイン名をポイントしており、API Gateway ステージ URL をポイントしていないことを確認してください。
1. 次の openssl コマンドを実行して、SSL 証明書がカスタムドメインによって返されることを検証します。
openssl s_client -connect www.example.com:443 -servername www.example.com
出力例:
subject=/CN=*.execute-api.us-east-1.amazonaws.com
2. カスタムドメインで次の dig コマンドを実行します。
dig www.example.com
dig コマンドの出力には、API Gateway ステージ URL をポイントする CNAME レコードか、IP アドレスをポイントする A レコードのいずれかが含まれています。
3. ドメイン www.example.com の DNS レコードのポイント先をドメインレジストラに確認します。ドメインが Amazon Route 53 に登録されている場合は、「Route 53 からの DNS 応答の確認」を参照してください。
4. DNS レコードが正しくマッピングされていることを確認するには、API Gateway コンソールを開きます。ナビゲーションペインで [Custom domain names] (カスタムドメイン名) を選択し、カスタムドメインを選択します。
5. [Domain details] (ドメインの詳細) から [Configuration] (設定) を選択し、API Gateway のドメイン名を確認します。カスタムドメイン名は API Gateway ドメイン名にマッピングする必要があります。リージョンレベルののカスタムドメイン名には、「d-example.execute-api.<region>.amazonaws.com」のようなプレフィックスを使用します。エッジ最適化のカスタムドメイン名には、「distribution-id.cloudfront.net」のようなプレフィックスを使用します。
6. CNAME レコードが API Gateway のドメイン名ではなく API Gateway ステージ URL をポイントしている場合は、CNAME レコードを更新します。ステージ URL ではなく API Gateway ドメイン名をポイントするように CNAME レコードを変更します。カスタムドメイン名が第三者に登録されている場合は、ドメイン登録事業者にお問い合わせください。カスタムドメイン名が Route 53 に登録されている場合は、「レコードの編集」を参照してください。
7. Amazon Virtual Private Cloud (Amazon VPC) エンドポイント内で API を呼び出した場合は、カスタムドメイン名の CNAME または A レコードマッピングを確認します。プライベート DNS がオンになっている場合、API リクエストは 4xx エラーを返します。API リクエストは VPC エンドポイントを経由してルーティングされ、CNAME または A レコードにマッピングされるため、リクエストは失敗します。
関連情報
API Gateway API のカスタムドメイン名を設定するにはどうすればよいですか?
カスタムドメイン名を使用して API Gateway API を呼び出す際に、証明書の有効期限切れエラーまたは「証明書が無効です」エラーを解決する方法を教えてください