rubyでtwitterアプリを作ろうとすると、SSL_connectエラーが発生する件
以下のような定番のコードを書いて、Rubyプログラムからツイートしてみようと試みた。
# encoding:utf-8 require 'rubygems' require 'twitter' client = Twitter::REST::Client.new do |config| config.consumer_key = "XXXXX" config.consumer_secret = "XXXXX" config.access_token = "XXXXX" config.access_token_secret = "XXXXX" end client.update("test")
しかし・・・実行すると、
`rescue in request': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (Twitter::Error)
みたいエラーが発生。
なんだ、これは?
今回は、これを解決するために頑張ってみる。
とりあえずRubyからツイートする
細かい話はまたあとで、
というスタンスでいきまっせ。
さて、まず最初に、そもそもRubyでツイートするには、
gem install twitter
とやって、gemにtwitterライブラリを追加しなければならない。
しかし、上のコマンドで追加しようとすると・・・
Please update your PATH to include build tools or download the DevKit from 'http://rubyinstaller.org/downloads' and follow the instructions at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
エラー!!!
なんだこれはと思って調べたら、どうやらDevkitというものが必要らしい。
以下のサイトからとってこよう。
http://rubyinstaller.org/downloads
「For use with Ruby 1.8.7 and 1.9.3」の下にある、「DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe」をダウンロードする。
ダウンドーロしたexeを実行するとextract?(展開する?)みたいなことを聞かれるので、
「C:\ruby\devkit」
みたいなフォルダを作ってその下に解凍する。
たくさんファイルが展開されるので、ちゃんとフォルダ作った方がいい。
解凍したフォルダで、
ruby dk.rb init ruby dk.rb review ruby dk.rb install
を順番に実行する。
こんな感じのメッセージが出る。
C:\ruby\devkit>ruby dk.rb init [INFO] found RubyInstaller v1.9.3 at C:/ruby/Ruby193 Initialization complete! Please review and modify the auto-generated 'config.yml' file to ensure it contains the root directories to all of the installed Rubies you want enhanced by the DevKit. C:\ruby\devkit>ruby dk.rb review Based upon the settings in the 'config.yml' file generated from running 'ruby dk.rb init' and any of your customizations, DevKit functionality will be injected into the following Rubies when you run 'ruby dk.rb install'. C:/ruby/Ruby193 C:\ruby\devkit> C:\ruby\devkit>ruby dk.rb install [INFO] Updating convenience notice gem override for 'C:/ruby/Ruby193' [INFO] Installing 'C:/ruby/Ruby193/lib/ruby/site_ruby/devkit.rb'
ここまでやったところで、気を取り直して
gem install twitter
を実行すると、エラーが出ることなくgem installができた。
で、上のコードを実行する。
しかし。。。
rb:112:in `rescue in request': SSL_connect returned=1 errno=0 state=SSLv3 read s erver certificate B: certificate verify failed (Twitter::Error)
まぁ、ダメだよね。
じゃあどうすればいいの?
こうすればよかった↓
# encoding:utf-8 require 'rubygems' require 'twitter' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE client = Twitter::REST::Client.new do |config| config.consumer_key = "XXXXX" config.consumer_secret = "XXXXX" config.access_token = "XXXXX" config.access_token_secret = "XXXXX" end client.update("test")
「OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE」
を書けと。
このStackOverFlowの人が言ってた。
http://stackoverflow.com/questions/17076988/ruby-gem-twitter-certificate-verify-failed-twittererrorclienterror
証明書を検証しないって意味らしいです。
セキュリティ的に大丈夫かな?
詳しくは、下の方のリンクに説明がありそうです。
・Devkitのインストール
http://d.hatena.ne.jp/hackugyo/20110612/1307830385
・RubyのSSL証明書エラーの話し
http://d.hatena.ne.jp/riocampos+tech/20130614/p2
http://d.hatena.ne.jp/kesikaran/20100213/1266069166
Ruby2.0でTwitterアプリを作りたい人はコチラで。
http://qiita.com/owata/items/fb25faf71124eaa3cb14