るびらな!

RubyをLearnする人の勉強記録。(超)弩(級の)素人なので、誰かダメさがわかる人に罵ってもらったりして、少しずつ知見を広げたいと思っています。

rubygems.orgにSSL接続するまでにほぼ24時間迷走した話。

ここも押していただけると嬉しいです #=> にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ Rubyへ にほんブログ村 IT技術ブログ Ruby on Railsへ

Twitter@HatenaRubyLearn)でも次のようにつぶやきましたが、対処できたので記録を。



その後、タイトルのとおり、迷走をした結果、何とかrubygems.orgにコンソールから接続でき、gemのupdateやbundleの操作ができるようになったので、次に困った人のために記録しておきます。

環境

OS : Windows 7 (32bit)
PC : Lenovo Thinkpad X201
Ruby&Rails Directory : "C:\RailsInstaller\"

RubyRailsは、RailsInstallerを使ってgitとかdevkitとかと一緒に入れています。

発生していた問題

RailsInstallerを使うと、Windows環境では「Command Prompt with Ruby and Rails」というコンソールが設定されます。
これを使ってRubyRailsの操作を行っていくわけですが、gemのupdateやinstallをするときには、デフォルトのソースを調べると以下のようになります。

>gem source --list
*** CURRENT SOURCES ***

https://rubygems.org/

要は、gemコマンドではrubygems.orgSSL接続している、ということになります。
しかし、試しに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時まで格闘してた)ので、仮眠を取り、昼間のスケジュールをこなすことに。

そして、冷静になった頭で考えたら、「rubySSL証明書を読み込みにいく、そのディレクトリにcacert.pemを置けばいいんじゃね?」と思い立ったので、調べた結果、

C:\RailsInstaller\Ruby2.0.0\lib\ruby\2.0.0\rubygems\ssl_certs

ここだ!ということがわかったので、ここに落としてきたcacert.pemを放り込んでみました。

すると、あら不思議!

何事もなかったかのように動くじゃありませんか!


ほんと、今までなんだったんだろう・・・