マルチドメインのpostfixを運用していて、ある日突然メール送信時に、証明書の期限が切れているとのエラーが出るようになりました。証明書は更新しているのになぜ?とお悩みの方へヒントになれば幸いです。
発生現象・環境・背景
・postfix(3.5.9, linux) main.cf で複数ホスト名の証明書を使い分けるため、tls_server_sni_mapsを定義。postmapコマンドで.dbファイルを作成。
・各証明書はLet’sEncryptで3ヶ月ごとにcertbot renewコマンドで自動更新。/etc/letsencrypt/live/(ホスト名)に最新の証明書へのシンボリックリンクがあり、このパスをpostfixのtls_server_sni_mapsに定義。つまりいつでも最新の証明書がそのパスにある。
・メール送信時に証明書の期限切れで送信エラーとなる。opensslコマンドで確認するも、証明書は有効なものに更新済み。
openssl s_client -connect ホスト名:ポート -starttls smtp |openssl x509 -noout -dates
原因と対応
・tls_server_sni_mapsのdbファイルは単なるホスト名ごとの証明書へのパス(ファイル名)のテーブルと思いきや、db作成時点の証明書の本体がガッツリ入っていた。つまり、postmapコマンドを実行した時のシンボリックリンク先の証明書の中身。以下でそれを確認。
postmap -q ホスト名 /etc/postfix/(tls_server_sni_mapsのファイル名)| nkf -mBW
・証明書更新の際にはpostmapコマンドでtls_server_sni_mapsのdbファイルを再作成することにして解決