curlでまたSSLのエラーが出たので対処

$ curl -L http://xrl.us/perlbrewinstall | sh
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

CentOSにperlbrewを入れようとしたら、curlがまたSSL周りでエラーメッセージを出しました。また、といっても前とは違う環境だから当然といえば当然だけど。

解決策

$ cp /etc/pki/tls/certs/ca-bundle.crt . #バックアップ
$ sudo curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
$ curl -I https://github.com/gugod/App-perlbrew/raw/master/perlbrew-install | head -n 2
HTTP/1.1 302 Found
Server: nginx/1.0.4

$ rm ca-bundle.crt #問題なければ削除

なぜかcurl-ca-bundle.crtが無い

$ ls /usr/share/curl/curl-ca-bundle.crt
ls: /usr/share/curl/curl-ca-bundle.crt: そのようなファイルやディレクトリはありません

Macですが、githubからのcloneがSSLのエラーで出来なくなってた - kanonjiの日記の様に似たような事がありました。エラーメッセージにもcurl-ca-bundle.crtというファイル名が見えるんですが、なぜか上記の場所にはありませんでした。
あと、Macの例だと、gitはだめだけどcurlコマンドは大丈夫だったという違いがあったりします。なんだろう。

Automated Conversions

We provide automated conversions - done weekly. The output CA bundle file in PEM format is available from here:

  • cacert.pem (234KB)
  • cacert.pem.gz (124 KB)
  • cacert.pem.bz2 (124 KB)

The file contains the datestamp of the conversion.

These files do not contain the DigiNotar certificates anymore since Mozilla started marking them as untrusted and our script was updated to be aware of that marking.

http://curl.haxx.se/ca/

まぁ、ないものは仕方が無いので、もう一度調べなおして、別の解決策を見つけました。curl公式に、このように週更新で提供されてるらしいので、前述のコマンドで総入れ替えします。どうもMozillaが提供しているもののようです。引用の最後にもありますが、クラックされて不正なSSL証明書を発行していたDigiNotarのCA証明書は取り除かれてます。

補足

冒頭のURLで分かりますがperlbrewのインストールをしようとしてました。同時期にFedora 15でも、同じ手順でperlbrewをインストールしてて、そっちではエラー出ませんでした。このURLは、リダイレクトで最終的にhttps://github.com/gugod/App-perlbrew/raw/master/perlbrew-installになるので、github.comのSSL証明書がDigiCertのに代わったのが原因みたいですが、Fedora 15はDigiCertのCA証明書を持ってたってことになるのかな。

gitやcurlやwgetでGitHubにアクセスするとcertification errorになる原因を調べてみた - Gマイナー志向
githubの証明書に関してはここが詳しそう。

環境

Linux CentOS 5.6
curl 7.15.5