0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

curl も Node も HTTPS だけ全滅するのに DNS も HTTP も通る → SSL_CERT_FILE が消えたファイルを指していた

0
Posted at

ある日、Mac の上で HTTPS の通信だけがすべて失敗するようになりました。

  • curl はどこに向けても HTTP 000
  • Node は unable to get local issuer certificate
  • 定期実行のジョブは ENOTFOUND で即終了

一方で、DNS は引けるし、HTTP(80番)は 200 が返ります。回線の障害に見えますが、違いました。

原因

環境変数 SSL_CERT_FILE が、存在しないファイルを指していました。

curl -sS https://www.google.com
# curl: (77) error setting certificate verify locations

env | grep -iE "SSL_CERT|CA_BUNDLE|NODE_EXTRA"

SSL_CERT_FILE の指す先が無いと、curl は HTTPS を始める前に終わります。Node の NODE_EXTRA_CA_CERTS なども同じ系統なので、まとめて確認します。

シェルの設定を直しても直らない

.zprofile や .zshrc を直して、/etc/ssl/cert.pem を指すようにしても、すでに起動しているアプリは古い値を持ったままです。新しいターミナルでは再現しないのに、そのアプリから動くジョブだけが失敗し続けます。

  • 直し方:設定を直したうえで、アプリを再起動する
  • 応急処置で、指されているパスに /etc/ssl/cert.pem をコピーすると一時的には通ります。ただ、古い値を持ったプロセスが残るので恒久策にはなりません(実際、同じ日の別の時刻のジョブがまた失敗しました)

調べるときの注意

macOS の zsh には timeout コマンドがありません。疎通確認のスクリプトで timeout 5 curl … と書くと command not found になり、それを「通信失敗」と読み違えます。

まとめ

  • HTTPS だけ全滅・DNS と HTTP は通る → まず SSL_CERT_FILE を見る
  • 設定を直したら、そのアプリを再起動する

生成AI(Claude Code)に書かせて一人で会社を回している記録を note に書いています。
https://note.com/kaito_cometa

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?