RubyでTwitterを利用するも早速挫折
まずコードを
require "twitter"
client = Twitter::REST::Client.new do |config|
config.consumer_key = "略"
config.consumer_secret = "略"
config.access_token = "略"
config.access_token_secret = "略"
end
client.home_timeline.each do |tw|
puts tw.text
end
ここまではなんとかなったものの
SSLっぽいエラーが吐かれてしまった。
このように一杯書いてある(小並感)
どうもSSLv3を使っていることに問題があるそうだ。
※追記(wktk氏に感謝)
上位規格の TLS 1.2 から 1.1, 1.0, SSL 3.0 までフォールバックするように
なってるから v3 自体は直接関係ない
証明書の仕組みの話で、信頼するルート証明書のリスト (pem ファイル) が手元に存在せず、サーバーが提示する証明書が正当か検証できないためエラーになっていた
参考URL
Transport Layer Security @Wikipedia
SSLエラーを何とかしたい
とりあえずhome_timelineの上の行に
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
を入れると取得できた。これでは危険なのでSSL認証の問題を探ることに。
ここなどを参考にした。
Windowsでgem installするとSSLエラーが出る場合の解決策
どうも
ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
を入れて出てきたパスに
http://curl.haxx.se/ca/cacert.pem
を保存すればよいとわかった。
SSLエラー対処を実際にやってみる
実際にやってみた
ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
すると上図のような見たこともないディレクトリが出てきた。
早速ディレクトリを作成し、PEMファイルを入れてみた。
さてSSLの問題も解決したから、早速ファイルを書き換えて実行
やっぱりだめでした
あっさり解決
以下のようにコマンドライン上で打ち込んだ。
ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x64-windows/openssl/1.0.0o/ssl/cert.pem
お気づきになられたであろうか。上記のエクスプローラー図では
cacert.pem
となっている
これを
cert.pem
に名前を変えてあっさり解決
アホなミスもクリティカルエラーになるので注意すると堅く誓う