AWS CLI の SSL 証明書エラー「SSL: CERTIFICATE_VERIFY_FAILED」の解消方法
こんにちは。テクニカルサポートチームのShiinaです。
はじめに
AWS CLI 実行時に「SSL: CERTIFICATE_VERIFY_FAILED」エラーが発生して困ったことはありませんか?
このエラーは主に透過プロキシ環境下で発生することが多く、証明書を指定することで解消可能です。
本記事では、コマンドが実行できない場合の解消方法として、コマンドラインオプションと構成設定による2つの方法を検証してみましたのでご紹介します。
困っていた事象
AWS CLI コマンドを実行したところ、以下のエラーが発生し、正常に実行できませんでした。
aws s3 ls
SSL validation failed for https://s3.ap-northeast-1.amazonaws.com/ [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1000)
結論
証明書を入手した上で、次のいずれかの方法で解消可能です。
- コマンドラインオプション
--ca-bundle
で証明書を指定して実行する - AWS CLI 構成設定で
ca_bundle
パラメータで証明書の指定を行う
エラーが発生する状況
主に透過型プロキシサーバを利用している場合に発生する可能性があり、具体的には次のケースにおいて [SSL: CERTIFICATE_VERIFY_FAILED] エラーが発生します。
-
自己署名されたプロキシの証明書を使用している
自己署名 SSL 証明書を使用して Squid の SSL Bump を設定している場合など -
企業の CA ルート証明書が ローカル CA レジストリに登録されている
クラウドセキュリティプラットフォーム(Netskopeなど)を使用しており、ローカル PC にインストールされたクライアントやエージェントにより企業ネットワーク内のトラフィックが制御されている場合など
エラーの原因
AWS CLI がプロキシの証明書を信頼していないことが原因と考えられます。
Windows PC を利用している場合、ローカル CA レジストリ登録(certmgr の証明書インポート)を行うことでブラウザでの証明書エラーは解消することができます。
しかしながら、AWS CLI はローカル CA レジストリにあるルート証明書を検索できないため、エラーが発生します。
エラー解消手順
検証環境
・自己署名 SSL 証明書と Squid を構築した EC2 インスタンスを透過プロキシ環境として利用します。
・クライアントとして AWS CLI インストールとルート証明書をインポートした Windows の EC2 インスタンスを利用します。
証明書の入手と配置
[SSL: CERTIFICATE_VERIFY_FAILED] エラーへの解消には証明書が必要となります。
- 自己署名証明を利用している場合
ルート証明書が必要であり、生成時に入手できます。 - 企業 CA を利用している場合
企業 CA 証明書が必要であり、企業内の IT 部門からの入手が想定されます。
入手した証明書は、AWS CLI から参照可能な場所に保存しておきます。
今回の検証では、証明書ファイル(squid.cer)を c:\squid.cer
に保存し、AWS CLI で参照しました。
方法①:コマンドラインオプションを指定する方法
AWS CLI コマンドを実行時のコマンドラインオプションとして --ca-bundle
を付与して証明書のパスを指定します。
AWS CLI コマンドを実行してみます。
aws s3 ls --ca-bundle c:\squid.cer
エラーメッセージが解消され、正常に応答が得られました。
方法②:構成設定(config ファイル)で定義する方法
config ファイルにca_bundle
パラメータを定義して証明書のパスを指定します。
config ファイルは以下のファイルパスに保存されています。
ユーザーが Administrator の場合の例:C:\Users\Administrator\.aws\config
もし config ファイルが存在しない場合は、aws configure
コマンドを実行することで新たに生成することができます。
ファイルを編集し、以下の定義を追記して保存します。
ca_bundle = c:\squid.cer
[default]
region = ap-northeast-1
ca_bundle = c:\squid.cer
AWS CLI コマンドを実行してみます。
aws s3 ls
エラーメッセージが解消され、正常に応答が得られました。
まとめ
AWS CLIで発生する「SSL: CERTIFICATE_VERIFY_FAILED」エラーは、証明書の指定で解消可能です。
コマンドラインオプションで証明書を指定する方法と、構成ファイルで設定する方法の2つがあります。
同様のエラーが発生した際には、本記事の手順を参考に対処してください!
本記事が同様の問題に直面した方の参考になれば幸いです。
参考