手当たり次第に書くんだ

飽きっぽいのは本能

Redmine のメール送信で certificate verify failed が出る原因と確認観点

Redmine からメールを送信する時に、接続先のメールサーバーが自己署名証明書や内部 CA の証明書を使っていると、証明書検証に失敗してメール送信できないことがあります。

エラーだけを見ると Redmine 側の問題に見えますが、実際には Redmine が動いている Ruby / コンテナ / OS から見て、メールサーバーの証明書チェーンを信頼できていない状態です。

発生するエラー

Redmine のメール送信テストで、次のようなエラーが出ることがあります。

メール送信中にエラーが発生しました
SSL_connect returned=1 errno=0 peeraddr=xxx.xxx.xxx.xxx:25 state=error:
certificate verify failed (unable to get local issuer certificate)

本来の対応は CA を信頼させること

本来の対応は、Redmine が動作している環境に内部 CA 証明書を配置し、メールサーバーの証明書チェーンを正しく検証できるようにすることです。コンテナで Redmine を動かしている場合は、ホスト OS ではなく Redmine コンテナ内の信頼ストアも確認します。

確認する観点
  • メールサーバーが提示する証明書チェーン
  • Redmine コンテナ内の CA 信頼ストア
  • SMTP 接続先名と証明書 SAN の一致
  • STARTTLS / SMTPS / 平文 SMTP のどれで接続しているか

暫定回避として検証を無効化する設定

どうしても一時的に送信確認だけを行いたい場合、Redmine の config/configuration.yml で証明書検証を無効化する設定があります。ただし、これは根本対応ではなく、通信相手の正当性を検証しない設定です。恒久運用では避けるべきです。

default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: mail.example.internal
      port: 25
      domain: redmine.example.internal
      openssl_verify_mode: none

運用上の判断

内部システムでは、自己署名証明書や内部 CA 証明書を使うこと自体は珍しくありません。ただし、検証を無効化して動かすのではなく、Redmine が動作する環境に CA を正しく配布し、証明書チェーンを検証できる状態にするのが基本です。

一時回避として openssl_verify_mode: none を使う場合も、なぜ検証に失敗しているのかを確認し、CA 信頼、証明書チェーン、接続先名を後から直せるようにしておくべきです。

参考
書籍
参考書籍

暗号技術入門 第3版 秘密の国のアリス

公開鍵暗号、電子署名、証明書など、TLS や内部 PKI の前提になる暗号技術を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連する記事

TLS・証明書の関連記事
Redmine のメール送信で certificate verify failed が出る原因と確認観点

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る