PR

postfixのSMTPS(465)で証明書エラーが出る原因と対処方法をわかりやすく解説

スポンサーリンク

はじめに(この記事でわかること)

  • postfixで SMTPS(TCP 465)接続時に証明書エラーが出る理由
  • エラーが出たときの 基本的な確認ポイント
  • 今回の設定ミスと 具体的な対処方法

SMTPSと証明書エラーをざっくり理解する

SMTPSとは?

  • SMTPS = 最初から暗号化されたSMTP通信
  • ポート番号は 465

証明書エラーとは何が起きているのか?

設定場所「このサーバは本当に正しい相手ですか?」を確認できない状態

ブラウザのSSL警告と同じ考え方

主に、サーバ名 と 証明書 のFQDNが一致していないことが原因

今回発生した具体的なエラーの内容

Nov 11 14:02:51 vhost01 postfix/smtpd[3203]: warning: TLS library problem: error:0A000416:SSL routines::ssl/tls alert certificate unknown:ssl/record/rec_layer_s3.c:909:SSL alert number 46:

最初に確認すべき3つのポイント

1. postfixが使っている証明書はどれか

  • main.cf の以下設定を確認
    • smtpd_tls_cert_file
    • smtpd_tls_key_file
  • 別の証明書を参照しているケースが多い

2. 証明書のCN / SANと接続先ホスト名が一致しているか

  • 具体例:
    • 証明書:mail.example.com
    • 接続先:smtp.example.com ← NG
  • SMTPSではここが一致していないと即エラー

コマンドで確認する場合の例:

# openssl s_client -connect mail.example.com:465

3. 中間証明書が正しく設定されているか

postfixでは fullchain.pem を使うのが基本

Let’s Encryptで特に多い原因

「証明書は正しいのに、なぜかエラー」な場合はほぼこれ

具体的に確認してみる

ここでは、opensslのコマンドではなく、thunderbirdで、「証明書を取得」から確認します。

Thunderbirdのセキュリティ例外の追加

確認ポイント1の証明書の内容は間違っていない。証明書の有効期限もあっている。

確認ポイント2の証明書とサーバのドメインも一致していて問題ない。

問題点は、確認ポイントの3で「postfixでは fullchain.pem を使う」でした。

具体的には、以下のコマンドを実行して、fullchain.pem の証明書を作成し、設定する必要がありました。

# cat サーバ証明書.crt 中間証明書.cer > fullchain.pem の証明書.crt

/etc/postfix/main.cfファイルには以下のように指定します。

smtpd_tls_cert_file = /etc/pki/tls/certs/fullchain.pemの証明書.crt

smtpd_tls_key_file = /etc/pki/tls/private/サーバ証明書キー.key

smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

こちらを設定して、postfixのサービスを再読み込みすると、問題が解消されました。

今回はここまでです。最後までお読み頂きありがとうございました。