AWS CLI の SSL 証明書エラー「SSL: CERTIFICATE_VERIFY_FAILED」の解消方法

AWS CLI の SSL 証明書エラー「SSL: CERTIFICATE_VERIFY_FAILED」の解消方法

Clock Icon2025.02.02

こんにちは。テクニカルサポートチームの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 で参照しました。
haiti

方法①:コマンドラインオプションを指定する方法

AWS CLI コマンドを実行時のコマンドラインオプションとして --ca-bundle を付与して証明書のパスを指定します。

AWS CLI コマンドを実行してみます。

aws s3 ls --ca-bundle c:\squid.cer

command

エラーメッセージが解消され、正常に応答が得られました。

方法②:構成設定(config ファイル)で定義する方法

config ファイルにca_bundle パラメータを定義して証明書のパスを指定します。
config ファイルは以下のファイルパスに保存されています。
ユーザーが Administrator の場合の例:C:\Users\Administrator\.aws\config
もし config ファイルが存在しない場合は、aws configure コマンドを実行することで新たに生成することができます。

ファイルを編集し、以下の定義を追記して保存します。
ca_bundle = c:\squid.cer

config
[default]
region = ap-northeast-1
ca_bundle = c:\squid.cer

config

AWS CLI コマンドを実行してみます。

aws s3 ls 

configsetteigo

エラーメッセージが解消され、正常に応答が得られました。

まとめ

AWS CLIで発生する「SSL: CERTIFICATE_VERIFY_FAILED」エラーは、証明書の指定で解消可能です。
コマンドラインオプションで証明書を指定する方法と、構成ファイルで設定する方法の2つがあります。
同様のエラーが発生した際には、本記事の手順を参考に対処してください!

本記事が同様の問題に直面した方の参考になれば幸いです。

参考

https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/cli-chap-troubleshooting.html#tshoot-certificate-verify-failed

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.