LoginSignup
3
4

More than 3 years have passed since last update.

Github herokuへのpushができないエラー

Posted at

はじめに

下記のエラーが発生し,Githubへのpushができなくなりました。
同じようなエラーが発生した方の参考になればと思います。

$ git push heroku master

fatal: unable to access 'https://git.heroku.com/省略.git/': error setting certificate verify locations:
  CAfile: /etc/ssl/cert.pem
  CApath: none

到達点

以下の2点を達成する
・エラーの原因を調べる
・エラーの対処を学ぶ

流れ

① エラー前に入力したコマンド
② 原因を調べる
③ cacert.pemをダウンロードする

① エラー前に入力したコマンド

$ CERT_PATH=$(ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE")
$ sudo curl "https://curl.haxx.se/ca/cacert.pem" -o $CERT_PATH

CERT_PATHは、変数
OpenSSL::X509::DEFAULT_CERT_FILEは、デフォルトのCA証明書ファイル名です。
"https://curl.haxx.se/ca/cacert.pem" をCERT_PATHに出力するコマンドを行ったところ、Githubへのpushができなくなりました。

② 原因を調べる

$ ls -al /private/etc/ssl

total 24
drwxr-xr-x   6 root  wheel   192  1  1  2020 .
drwxr-xr-x  85 root  wheel  2720  2 27 10:58 ..
-rw-r--r--   1 root  wheel   299  3  6 16:46 cert.pem
drwxr-xr-x   2 root  wheel    64  1  1  2020 certs
-rw-r--r--   1 root  wheel   745  1  1  2020 openssl.cnf
-rw-r--r--   1 root  wheel  1006  1  1  2020 x509v3.cnf

cert.pemの存在を確認する
 

$ ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE"

/private/etc/ssl/cert.pem

ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE"によって、証明書の置き場所は/etc/ssl/cert.pemと分かります。
そして、/etc/ssl/cert.pemには、"https://curl.haxx.se/ca/cacert.pem" の内容が出力されています。
 

$ cat /private/etc/ssl/cert.pem 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://curl.se/ca/cacert.pem">here</a>.</p>
<hr>
<address>Apache Server at curl.haxx.se Port 80</address>
</body></html>

/etc/ssl/cert.pemには、 SSL証明書用の情報が記載されていました。
また、「301リダイレクト」の設定がされていていることがわかります。

以上のことからわかること3点

・ruby -ropenssl -e "puts OpenSSL::X509::DEFAULT_CERT_FILE"では、/etc/ssl/cert.pemが返され、"https://curl.haxx.se/ca/cacert.pem" の内容が出力されています。

・https://curl.haxx.se/ca/cacert.pemというURLには「301リダイレクト」の設定がされている。これが原因だと推測します。

sudo curl "https://curl.haxx.se/ca/cacert.pem" -o $CERT_PATHというコマンドをすると、/etc/ssl/cert.pem ファイルに、証明書情報ではなくリダイレクトの情報が返される。

③ cacert.pemをダウンロードする

$ sudo wget https://curl.se/ca/cacert.pem 
zsh: command not found: wget

$ brew install wget
$ sudo wget https://curl.se/ca/cacert.pem 

新たにhttps://curl.se/ca/cacert.pem からダウンロードすると、Githubへのpushが可能になりました。
wgetが使えない場合は、installしてください。

学んだこと

以下の3点を行うと問題解決する糸口が見つかることを学びました。
「エラーメッセージをしっかり理解する」
「エラーメッセージで指定されているファイルなどを調べてみる」
「理解しないまま使っているコマンドの挙動を調べてみる」

参考記事

ssl証明書エラーが発生する場合の対処法

3
4
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
3
4