わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Cygwin + RubyのSSL証明書を更新する

  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')
=> #

アクセスできました.
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(ゴーゴーイチ)メソッド; スケジュール管理のすすめ