2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenSSL 3.6.0 で発生したSSL証明書エラーの原因と対策

Last updated at Posted at 2026-01-01

はじめに

Ruby 3.4.1 と OpenSSL 3.6.0 の組み合わせで、AWS SDK を使用した際に下記のようなエラーが発生しました。

Seahorse::Client::NetworkingError: SSL_connect returned=1 errno=0 peeraddr=3.5.154.3:443
state=error: certificate verify failed (unable to get certificate CRL)

調べた結果、OpenSSLの2025年10月のバージョン変更(3.5.x → 3.6.0)が原因のようでしたが、AIにエラーを投げるだけでは有効な解決策がすぐには見つからなかったため、こちらの記事で解決策についてまとめていきます。


目次

  1. 発生した問題
  2. 環境情報
  3. SSL証明書の基礎知識
  4. CRL(Certificate Revocation List)とは
  5. なぜエラーが発生したのか
  6. 解決策
  7. まとめ
  8. 参考リンク

1. 発生した問題

エラーの概要

Railsアプリケーションの起動時、AWSサービス(S3など)への接続で以下のエラーが発生しました。

Seahorse::Client::NetworkingError: SSL_connect returned=1 errno=0 peeraddr=3.5.154.3:443
state=error: certificate verify failed (unable to get certificate CRL)

エラーのポイント

  • certificate verify failed - 証明書の検証に失敗
  • unable to get certificate CRL - CRL(証明書失効リスト)を取得できない

2. 環境情報

項目 バージョン
Ruby 3.4.1
OpenSSL 3.6.0
OS macOS (Apple Silicon)
Rubyインストール mise(rbenvでも同様)
OpenSSLインストール Homebrew (openssl@3)

OpenSSLのバージョン確認方法

ruby -ropenssl -e "puts OpenSSL::OPENSSL_VERSION"
# => OpenSSL 3.6.0 1 Oct 2025

3. SSL証明書の基礎知識

SSL証明書とは

SSL証明書は、インターネット通信における「身分証明書」です。

あなたのアプリ 📱 ←──────→ 🏢 AWSサーバー
              HTTPS通信

1. アプリ「本当にAWSさん?証明書を見せて」
2. AWS「はい、これが私の証明書です 📜」
3. アプリ「信頼できる機関が発行してるね、OK!」

CA証明書バンドルとは

「信頼できる認証局(CA)のリスト」です。macOSでは Homebrew の ca-certificates パッケージで提供されます。

/opt/homebrew/etc/openssl@3/cert.pem
    ↓ シンボリックリンク
/opt/homebrew/etc/ca-certificates/cert.pem
    └─ Mozillaが管理する信頼できるCAのリスト

4. CRL(Certificate Revocation List)とは

CRLの役割

CRL(Certificate Revocation List)は「失効した証明書のリスト」です。

証明書が有効期限内でも、以下の理由で取り消されることがあります:

理由 説明
秘密鍵の漏洩 ハッキングで鍵が盗まれた
組織の変更 会社の倒産、買収など
不正発行 誤って発行された証明書

CRLの仕組み

証明書には「CRL配布ポイント」が記載されている
    ↓
例: http://crl.r2m01.amazontrust.com/r2m01.crl
    ↓
必要なときにインターネットからダウンロードして確認

CA証明書とCRLの違い

項目 CA証明書 CRL
内容 信頼できる認証局のリスト 失効した証明書のリスト
保存場所 ローカルファイル インターネット上(URLでアクセス)
更新頻度 OS/パッケージ更新時 通常24時間ごと

5. なぜエラーが発生したのか

原因:OpenSSL 3.6.0 の仕様変更

OpenSSL 3.6.0 で X509_V_FLAG_CRL_CHECK_ALL フラグの挙動が変更されました。

【OpenSSL 3.5.x 以前】
V_FLAG_CRL_CHECK_ALL だけでは CRLチェックは動かない
(V_FLAG_CRL_CHECK と組み合わせる必要があった)

【OpenSSL 3.6.0】
V_FLAG_CRL_CHECK_ALL だけで CRLチェックが動くようになった

参考: OpenSSL Issue #28752

Ruby openssl gem のデフォルト設定

Ruby の openssl gem は、デフォルトで V_FLAG_CRL_CHECK_ALL を有効にしていました。

# OpenSSL 3.5 以前 → 問題なし(フラグがあっても動かない)
# OpenSSL 3.6.0   → CRLチェックが走る → CRLをダウンロードできない → エラー!

エラーの流れ

Rails起動
    ↓
Aws.config.update(**args)
    ↓
AWSへのSSL接続を準備
    ↓
証明書検証(OpenSSL 3.6.0)
    ├─ CA証明書チェック: OK ✅
    └─ CRLチェック: CRLをダウンロードできない 💥
    ↓
エラー: "unable to get certificate CRL"

6. 解決策

推奨:openssl gem のアップデート

openssl gem 3.1.2 以降 では、V_FLAG_CRL_CHECK_ALL がデフォルトから削除されました。

参考: ruby/openssl v3.1.2 Release Notes

gem openssl 3.3.1 以降であれば、ruby 3.2.x 〜 3.4.x に対応しています。

Ruby on Mac - Certificate verify failed

【インストール例】

# Gemfile
gem 'openssl', '>= 3.3.1'
bundle install

7. まとめ

問題の要点

  1. OpenSSL 3.6.0 で CRLチェックの挙動が変更された
  2. Ruby の openssl gem がデフォルトで CRLチェックを有効にしていた
  3. macOS にはCRLがローカルに存在しないため、エラーが発生

解決策

gem 'openssl', '>= 3.3.1' を Gemfile に追加するのが最も推奨される解決策です。

学んだこと

  • SSL証明書検証には「CA証明書」と「CRL」の2つの仕組みがある
  • バージョンアップで予期しない挙動変更が起きることがある

8. 参考リンク

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?