gistyでpostするとcertificate verify failed

一昨日あたりからgistyでpostできなくて困ってました。SSLの認証のあたりで失敗しているようです。
adhocな解決方法ですが、とりあえず自分の環境でさえ動けば良いという人は参考になるかもしれません。

errorの内容

gisty post anything-file
Error: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

crtファイルを明示的に指定して渡してあげるとpostできるようになります。

crtファイルの探し方

locateとgrepを使うと楽にみつけられます。

% locate certs | grep '\.crt$' 
/etc/ssl/certs/ca-certificates.crt  # ubuntuなら
lib/gisty.rbにca_fileを追加

lib/gisty.rb*1のコードを書き換えます。

diff --git a/lib/gisty.rb b/lib/gisty.rb
index 55a6667..7e4a1ff 100644
--- a/lib/gisty.rb
+++ b/lib/gisty.rb
@@ -157,6 +157,7 @@ class Gisty
     https.use_ssl = true
     https.verify_mode = OpenSSL::SSL::VERIFY_PEER
     https.verify_depth = 5
+    https.ca_file = "/etc/ssl/certs/ca-certificates.crt"
     res = https.start {|http| http.request(req) }
     case res
     when Net::HTTPSuccess, Net::HTTPRedirection

動作検証

とりあえず、てきとーにgistyのREADME.rdocでもpostしてみます。

% gisty post README.rdoc
Initialized empty Git repository in /home/nao/sandbox/gisty/665920/.git/
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

うまくいきました。良かった。良かった。

*1:ubuntuでは/var/lib/gems/1.8/gems/gisty-0.0.16/lib/gisty.rb