Hatena::ブログ(Diary)

わさっき RSSフィード

2013年10月19日

[] Cygwin + RubySSL証明書を更新する

  1. 証明書ファイルをDL
  2. 環境変数 SSL_CERT_FILE にそのパスを設定
  3. 開いているコマンドプロンプトは一度閉じてから開く
igaiga diary(2013-06-17)

自分はCygwin使いなので,次のようにしました.

まず証明書ファイルを,ホームの下に置きます.直下は美しくない*1ので…

$ mkdir ~/.ssl_cert

$ curl -o ~/.ssl_cert/cacert.pem http://curl.haxx.se/ca/cacert.pem

次は,.zshrcの編集です.環境変数SSL_CERT_FILEのことを書いておきます.

export SSL_CERT_FILE=$HOME/.ssl_cert/cacert.pem
if [ ! -f $SSL_CERT_FILE ]
then
    unset SSL_CERT_FILE
fi

シェルを立ち上げ直して,動作確認…

$ echo $SSL_CERT_FILE

/home/takehikom/.ssl_cert/cacert.pem

$ pry

[1] pry(main)> require 'open-uri'

=> true

[2] pry(main)> open('https://www.google.co.jp’)

=> #<File:/(略)/AppData/Local/Temp/open-uri201310(略)>

アクセスできました.

SSL_CERT_FILEをなくすと…

$ unset SSL_CERT_FILE

$ pry

[1] pry(main)> require 'open-uri'

=> true

[2] pry(main)> open('https://www.google.co.jp’)

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

from /(略)/ruby/lib/ruby/2.1.0/net/http.rb:919:in `connect'

期待どおり,エラーが出ました*2

対話型だけでなく,きちんとスクリプトに書いたものも,見直しておきましょう.

ですが,OAuth認証のほうを使って,手元で動かしたところ,エラーが発生しました.「OpenSSL::SSL::VERIFY_PEER」を「OpenSSL::SSL::VERIFY_NONE」に書き換えると,うまく動作するようになりました.

goo.glの短縮URLはRubyスクリプトからcurlコマンドへ

「OpenSSL::SSL::VERIFY_PEER」に戻してみます.

SSL_CERT_FILEのあるとき〜*3は,短縮URLが得られ,SSL_CERT_FILEのないとき〜は,「certificate verify failed (OpenSSL::SSL::SSLError)」を含むエラーが出てくれました.


他に読んだところ:

(リリース:2013-10-18 未明

*1:証明書ファイルは,設定(rc)ファイルではないので.

*2環境変数は残したまま,~/.ssl_cert/cacert.pemのファイル名を一時的に変えても,同じエラーとなりました.

*3:551(ゴーゴーイチ)メソッド; スケジュール管理のすすめ

トラックバック - http://d.hatena.ne.jp/takehikom/20131019/1382033685
リンク元