windows10でrubyのgem、twitterを使ったらSSL_connectエラーがでた

普段、macでやっていることをwindowsでやってみたらうまくいかなかった。

require 'twitter'

client = Twitter::REST::Client.new do |config|
    config.consumer_key        = 'key'
    config.consumer_secret     = 'secret'
    config.access_token        = 'token'
    config.access_token_secret = 'token_secret'
end

tweets = [
    "tweet1",
    "tweet2",
  ]

tweets.each do |tweet|
    client.update(tweet)
    sleep(60)
end

エラー表示

C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/twitter-6.1.0/lib/twitter/rest/request.rb:37:in `rescue in perform': SSL_connect returned =1 errno=0 state=error: certificate verify failed (Twitter::Error)

調べてみたら対応策が見つかったので試してみた。

まず、証明書の場所を確認するため、powershellで下記のコマンドを入力する。

ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"

するとディレクトリとファイル名が表示される。

C:/Users/...省略.../ssl/cert.pem

現状これらのディレクトリやファイルはないので、各ディレクトリをつくって最後のsslディレクトリにpemファイルを収める。

powershellを使ってディレクトリをつくるため、powershellを管理者で立ち上げる。
Windowsマークを右クリックしてWindowsPowerShell(管理者)を選んでpowershellを起動させる。

下記のコマンドでディレクトリをつくる。
New-Item "C:/Users/...省略.../ssl" -Type Directory
(このときコマンド内のPATHはシングルもしくはダブルクォーテーションで囲むこと。)

下記のURLからpemファイルをダウンロード
https://curl.haxx.se/ca/cacert.pem

ファイル名をcacert.pemからcert.pemに変更する。

cert.pemファイルをsslディレクトリに移動する。

これでtweetできるようになった。

なぜSSLエラーになるようになったのか?
少し前にRubyの入れ替えをしたので、そのときへんなことをしてしまったのかもしれない。

環境

windows10
Ruby 2.3.0
twitter(gem) 6.1.0

参考にしたページ

RubyTwitterを SSLではじかれる件(Windows)
http://qiita.com/Accent/items/bc454e2fb653abedc77d

RailsTwitterREST APIを叩いた際のSSL証明書の認証エラー回避方法
https://teratail.com/questions/70035