githubからのcloneがSSLのエラーで出来なくなってた

$ git clone https://github.com/maimuzo/android_utils.git
Cloning into android_utils...
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/maimuzo/android_utils.git/info/refs

fatal: HTTP request failed

なんか、久しぶりにgithubからcloneしようとしたら、こんなエラーが出てしまいました。SSLのエラーというとMacPortsのcurlがSSLのエラーを出すトラブルが直った - kanonjiの日記が頭を過ぎるんですが、このcurlの件は解決してるし、gitはMacPortsからのじゃないしで、原因は別にありそう。

解決策

% sudo chmod 666 /usr/share/curl/curl-ca-bundle.crt
% sudo cat DigiCertHighAssuranceEVRootCA.crt >> /usr/share/curl/curl-ca-bundle.crt
% sudo chmod 644 /usr/share/curl/curl-ca-bundle.crt    
またGithub からcloneするときにSSLエラーが出たので、DigiCertのSSL証明書を追加して解決 - Goodpic

原因も含めて解決策を紹介してるエントリーがあったので、そっくりそのまま。

気になる点

やってる事は、curlにCAの証明書を登録*1してるわけなので、curlでhttps://github.comに通信したらエラーになるんじゃないかなと思ったんですが、そういうわけじゃない様子。

$ curl -LO https://github.com/maimuzo/android_utils.git
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 18001  100 18001    0     0   6118      0  0:00:02  0:00:02 --:--:--  6586

CA証明書を登録する前でも、上記コマンドは動きました。

$ GIT_SSL_NO_VERIFY=true git clone https://github.com/maimuzo/android_utils.git

今回のエラーは、回避策としてこういうのもあるらしい。GIT_SSL_NO_VERIFYを使う場合、fetchでもpullでもpushでも、通信する際は毎回GIT_SSL_NO_VERIFY=trueを付ける必要があって、正直めんどうです。
ただ、この環境変数*2の名前から、gitのもので、SSLの検証をするかどうかって感じなので、curlコマンドとして使う際は、デフォルトで検証しないって事なのかも。まぁよく分かりません。

環境

Mac Mac OS X 10.5.8(Leopard)
git git version 1.7.3.5

*1:例えばFirefoxにCA証明書が登録されてないCAが発行した証明書を使っているサイトでは、安全でないと警告が出る。ブラウザの場合、あまりユーザーがCA証明書を追加する機会はないとおもうけど。

*2:環境変数じゃなくってなんだっけ?シェル変数?コマンド変数?