rubygems.orgにSSL接続するまでにほぼ24時間迷走した話。
Twitter(@HatenaRubyLearn)でも次のようにつぶやきましたが、対処できたので記録を。
http://t.co/GfMuXOoxCeにSSL接続できない・・・ なんでSSL証明書通らないの?
— Nagg23@るびらな! (@HatenaRubyLearn) 2014, 12月 6
どうしても、http://t.co/GfMuXOoxCeにssl接続できない… cacert.pemとかも落としてきてDEFAULT_CERT_FILEにsetxしてるのに通してくれないし。何か方法はないのか…
— Nagg23@るびらな! (@HatenaRubyLearn) 2014, 12月 7
その後、タイトルのとおり、迷走をした結果、何とかrubygems.orgにコンソールから接続でき、gemのupdateやbundleの操作ができるようになったので、次に困った人のために記録しておきます。
発生していた問題
RailsInstallerを使うと、Windows環境では「Command Prompt with Ruby and Rails」というコンソールが設定されます。
これを使ってRubyやRailsの操作を行っていくわけですが、gemのupdateやinstallをするときには、デフォルトのソースを調べると以下のようになります。
>gem source --list *** CURRENT SOURCES *** https://rubygems.org/
要は、gemコマンドではrubygems.orgにSSL接続している、ということになります。
しかし、試しにrailsのupdateでもしてみようかなどと思うと、次のようにエラーを吐いてとまってしました。
>gem install rails ERROR: Could not find a valid gem 'rails' (>= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
えっ、SSL証明書がだめだって?? うーん…
対処その1
とりあえず、SSLじゃなくて普通にhttp接続できないの? ということで、以下のようにgemのsourceを増やし、http接続を試みました。
gem source -a http://rubygems.org/
こんな感じでした。
そうすると、
https://rubygems.org/ is recommended for security over http://rubygems.org/ Do you want to add this insecurity source? [yn]
という感じで、セキュリティ警告が出ましたが、とりあえずyと入力し、sourceに加えることができました。
しかし、これでもgem installはできず。うーん。
DEFAULT_CERT_FILEの変更をしてみよう!
これは、SSL証明書がうまく通ってないということはわかっていたので、コンソール側のDEFAULT_CERT_FILEを正しいものに変更してやればいいのでは? ということで、以下のサイトを参考にしながら、windowsでDEFAULT_CERT_FILEを変えようと色々やってみました。
homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応 - Qiita
んで、cacert.pemをrubyやらrailsやらが入っているディレクトリに落としてきて、以下のコマンドを入れてみました。
setx DEFAULT_CERT_FILE c:\railsinstaller\cacert.pem
そうすると、ちゃんと証明書を保存したと出ます。
しかし、結局gem installが動かないことには変わらず。
ここで、お手上げ!となり、rubyinstallerを試したり、railsinstallerのバージョンを変更したり色々しましたが、結局何も状況は変わらず。
結局、cacert.pemを保存する場所を変えてみる。
ここでお手上げとなり、もう暗かった外も明るくなっていた(夜11時から朝6時まで格闘してた)ので、仮眠を取り、昼間のスケジュールをこなすことに。
そして、冷静になった頭で考えたら、「rubyがSSL証明書を読み込みにいく、そのディレクトリにcacert.pemを置けばいいんじゃね?」と思い立ったので、調べた結果、
C:\RailsInstaller\Ruby2.0.0\lib\ruby\2.0.0\rubygems\ssl_certs
ここだ!ということがわかったので、ここに落としてきたcacert.pemを放り込んでみました。
すると、あら不思議!
何事もなかったかのように動くじゃありませんか!
ほんと、今までなんだったんだろう・・・