AWS-CLIを実行したら `CERTIFICATE_VERIFY_FAILED` というエラーメッセージが表示されてハマってしまった

AWS,Bash,Mac

背景

GWの10連休に入る直前に実行したところ、突然エラーメッセージが表示され正常に動作しなくなってしまいました。

どのようなエラーメッセージが表示された?

SSL validation failed for https://ec2.ap-southeast-1.amazonaws.com/ [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

実行環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ bash -version
GNU bash, バージョン 5.0.7(1)-release (x86_64-apple-darwin18.5.0)

$ aws --version
aws-cli/1.16.140 Python/3.7.3 Darwin/18.5.0 botocore/1.12.130

どのように aws-cl を利用していたか?

  • EC2 環境を構築するための簡易なシェルスクリプトを作成し、その中で何度か aws コマンドを実行していました。
  • シェルスクリプトは Bash で動作するようにシバンを設定していました。
    • #!/usr/bin/env bash

試してみたこと

aws コマンドのバージョンアップ

はじめは aws-cli のバージョンアップが原因かと思い、バージョンアップしてみたが、問題は解決しませんでした。

aws コマンドのオプション追加

以下のエントリを見つけました。

aws コマンドに --no-verify というオプションを付与すればエラーを無視できるということですが、、以下の理由により他の方法で対処することにしました。

  • aws コマンドを実行するたびにこのオプションを付与しないといけないのが煩わしい
  • 原因の根治となっていない

根治できないので他の作業をしていたところやはりハマる

根治できないので他の作業して時間のある時に調査しよう、と思ったのですがGithubからgit cloneしようとしたタイミングで関係ありそうなエラーでハマりました。

$ git clone https://github.com/kward/shunit2.git
Cloning into 'shunit2'...
fatal: unable to access 'https://github.com/kward/shunit2.git': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

HTTPSによる通信全般がエラーとなっているのでは?と思ったので以下のコマンドを試してみましたが、案の定同じ問題が発生しました。

  • curl
  • wget

[解決]再起動したら治りました(T_T)

これをヒントに更に調査してみると以下のエントリを見つけました。

macOSではSierra(10.12)まではOpenSSLを採用していたのですが、High Sierra(10.13)より、LibreSSLを使用するようになったようです。

なるほど。
読み進めるともっと関連ありそうな記載がありました。

ウィルス対策ソフトとしてカスペルスキーを使ってるのですが、これの可能性もありそうです。
(WindowsのWSLでSSL/TLS通信を行おうとするとカスペルスキーのせいで同様のエラーが出るそうです。)

確かに心当たりがあります。
最近会社のセキュリティソフトが ESET から カスペルスキー に変わりました。
インストールし直しましたが、確かにそれが怪しい。

結局再起動したら治りました。

まとめ

ハマったら再起動しましょう。
エンジニアとしては、根本原因をつかめなかった場合、再起動して治ったとしても負けた気分で一杯ではあります。

AWS,Bash,Mac