環境
問題
以下のコードが正常に実行できれば問題ない。
require 'net/http' require 'uri' uri = URI('https://httpbin.io/post') request = Net::HTTP::Post.new(uri) Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| response = http.request(request)で puts response.body end
自分のMacbookだと以下のようなエラーになってしまった
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=1.1.1.1:443 state=error: certificate verify failed (unable to get certificate CRL) (OpenSSL::SSL::SSLError)
原因
MacOS上でOpenSSL 3.6.0を使用している場合に発生する問題。OpenSSL 3.6.0での仕様変更が原因で、Rubyのopensslライブラリが正常に動かなくなってしまった。
具体的には
- OpenSSL 3.6.0で証明書の失効確認に関するフラグの挙動が変更された
- V_FLAG_CRL_CHECK_ALLがV_FLAG_CRL_CHECKを暗黙的に有効にするようになった
- しかしmacOSのOpenSSLビルドがCRLバンドルを提供していないため、証明書の検証に失敗する
インストールされているopensslのバージョンは以下のコマンドで確認できる
❯ openssl version OpenSSL 3.6.0 1 Oct 2025 (Library: OpenSSL 3.6.0 1 Oct 2025)
対応策
opensslライブラリをアップデートする方法(推奨
この問題はopensslライブラリのバージョンv3.1.2, v3.2.2, v3.3.1で修正されている。Gemfileに別途opensslを追加して bundle install すればアップデートされる
gem "openssl"
MacOSにインストールされているopensslのバージョンをダウングレードする方法
homebrewは原則最新バージョンしかインストールできないので自分専用のtapをローカルに新規作成してオレオレhomebrewでインストールする。
詳細のコマンドは以下が大変詳しい



