はじめに(この記事でわかること)
- 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_filesmtpd_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で、「証明書を取得」から確認します。

確認ポイント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のサービスを再読み込みすると、問題が解消されました。
今回はここまでです。最後までお読み頂きありがとうございました。