heroku HerokuでRails OpenSSL::SSL::SSLError

本稿について

本稿はサイト運営者が学んだことなどを記したメモの内容です。
全てが正確な情報とは限りません。ご注意ください。また修正するべき点は適時修正していきます

Herokuのstackを heroku-20 にあげてから外部通信時にエラーが発生するようになった。

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: dh key too small
from /app/vendor/ruby-2.6.6/lib/ruby/2.6.0/net/protocol.rb:44:in `connect_nonblock'

原因としては、heroku-20 のstackから SSLの通信が TLS v1.2 がdefaultになっている。
これに伴い、OpenSSLセキュリティレベルが1から2に引き上げられ、DH鍵の制約にひっかかった様子。

これについては heroku-20 のドキュメントに記載がありました。

これについては通信先がセキュリティレベル2に対応していないっぽいのでエラーになっている様子。
今回は開発環境での対応のため、とりあえずこちらでなんとかできないか調べた。

結論として暗号化でDH鍵を使用しないように設定できた。

uri = URI.parse("https://hogehoge.jp/api/v1/fugafuga")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl    = true
http.ciphers    = "DEFAULT:!DH"
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

ちなみに今回は使わなかったが、herokuのサーバーの証明書は以下のpathに存在した。
/usr/lib/ssl/certs/ca-certificates.crt


[参考]



Back