LoginSignup
0
1

More than 3 years have passed since last update.

1行追加のみ! Net::HTTPで発生するcertificate verify failedを回避

Last updated at Posted at 2020-03-16

外部APIを叩くのに、Docker使っていたらエラーが発生

SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain)

原因を調べるのに疲れた。
ローカル環境のみで発生するので真面目に対応するのも面倒。
本番はDocker使ってないし。
楽できる方法、探した。

解決策1

config/initailizersのファイルに以下を追記する。

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE if Rails.env.development?

参照:Rails5 devise twitterソーシャルログイン ローカル環境でのエラー解消

ただ、これだと、
・サーバー再起動が必要
・ローカル環境のログでalready initialized constant OpenSSL::SSL::VERIFY_PEER的な警告がうざい
というデメリットがある。

もっと楽、したい。
テキトーに生きたい。

解決策2

  def api(url)
    uri = URI.parse(url)
    req = Net::HTTP::Get.new(uri)
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = (uri.scheme == 'https')
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE # これ追加。
    res = http.start { |h| h.request(req) }

    JSON.parse(res.body)
  end

1行追加で動いた。
テキトーにif分岐追加しても1行で済む。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1