Capistrano で GitHub の CA Cert 関連のエラーが出てしまうとき

対象: capistano で Rails をデプロイして bundle install の際に GitHub で証明書のエラーになっちゃう人

require 'bundle/capistrano'
*** [err :: user@xxx.xxx.xxx.xxx] error: SSL certificate problem, verify that the CA cert is OK. Details:*** [err :: user@xxx.xxx.xxx.xxx] error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/holysugar/sandbox.git/info/refs
*** [err :: user@xxx.xxx.xxx.xxx]
*** [err :: user@xxx.xxx.xxx.xxx] fatal: HTTP request failed
 ** [out :: user@xxx.xxx.xxx.xxx] Git error: command `git clone 'https://github.com/holysugar/sandbox.git' "/u/app/shared/bundle/ruby/1.9.1/cache/bundler/git/sandbox-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --bare --no-hardlinks` in directory /home/user has failed.

選択肢は

  • 証明書の検証を無視する
  • 証明書を追加する

前者はいろいろなことを放棄していると思うので後者を選びたい。

一般的には http://sakuratan.biz/archives/2812 などに解決策がある。だけど、全部のサーバーで(例えば) /etc/pki/tls/cert.pem 書き換えたりするのは面倒。

結局のところ bundle install のタイミングで証明書が使えればいいので、追加したい証明書をレポジトリのどこか(ここでは config/etc/pki/ourcert.pem とする)に入れた上で、さらに deploy.rb に以下の設定を行う。

set (:bundle_cmd) { "GIT_SSL_CAINFO=#{release_path}/config/etc/pki/ourcert.pem bundle" }    

これで bundle コマンド中の git コマンドでは自動的に参照されるようにして、まとめて解決できた。:)

証明書は Firefoxhttps://github.com/ にアクセスして 「アドレスバー左の鍵クリック - 証明書を表示 - 詳細 - エクスポート - 証明書パスを含む X.509 証明書(PEM)」 と選択していけば保存できる。