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