Amazon API Gateway との Transport Layer Security (TLS) 認証をカスタムドメイン名で使用しています。証明書チェーンまたは自己署名証明書のエラーが発生しています。これをトラブルシューティングするにはどうすればよいですか?
簡単な説明
開始する前に、次の事項が完了していることを確認してください。
解決方法
Amazon API Gateway API を呼び出すときの特定のエラーメッセージのリストについては、次のような curl コマンドを実行します。
$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"
クライアントエラー
「curl: (58) PEM クライアント証明書を読み込めませんでした、OpenSSL エラーエラー:02001002: システムライブラリ:FOPEN: そのようなファイルまたはディレクトリはありません、(キーが見つからない、パスフレーズが間違っている、またはファイル形式が間違っている」
このエラーは、PEM ファイルの名前、場所、またはファイル形式が間違っていることを意味します。例えば、ローカルに保存されている証明書ファイルの形式は .crt ですが、API 要求では代わりに .pem ファイルが使用されています。これを解決するには、ローカルクライアント証明書の形式と名前が正しいことを確認してください。
「curl: (6) ホストを解決できませんでした: mtls.example.info」
クライアントはドメイン名を解決できませんでした。ドメイン名と設定が正しいことを確認してください。
「url: (58) schannel: 証明書ファイル self-signed.pem のインポートに失敗しました。最後のエラーは 0x80092002 です」
このエラーは、ローカルクライアントの .pem ファイルに問題があることを意味します。.pem ファイルに正しい名前と形式が含まれていることを確認してください。
"curl: (58) 秘密鍵ファイルを設定できません: 'self-signed.key' タイプ PEM"
このエラーは、ローカルクライアントファイルに問題があることを意味します。HTTP リクエストで提供された秘密鍵が欠落しておらず、正しいことを確認してください。
サーバーエラー
「アクセスが拒否されました。理由: 自己署名証明書。」
API リクエストの自己署名クライアント証明書が変更または破損していないことを確認する。
次の項目は正確に一致する必要があります:
- Amazon S3 のトラストストア (bundle.crt または bundle.pem) 内の自己署名証明書に署名するために使用される秘密鍵 (private.key) のモジュラス。
- API リクエスト (client.crt) で渡されたクライアント証明書のモジュ―ル。
2 つの係数を比較するには、次の OpenSSL コマンドを実行します。
$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt
注: 比較を容易にするために短いハッシュ値を生成するには、PIPE を使用して、出力モジュラスを暗号化ハッシュ関数に送信します。例: openssl sha1。
$ openssl [operation] -noout -modulus -in [data] | openssl sha1
有効なコマンドの出力例:
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
データの整合性を確認するには、次の diff コマンドを実行して、コンテンツレベルでデータが変更されていないことを確認します。
$ diff client.crt bundle.crt
関連情報
Amazon API Gateway の相互 TLS 認証の導入
相互 TLS を必要とする API ゲートウェイカスタムドメイン名からの HTTP 403 Forbidden エラーをトラブルシューティングする方法を教えてください。