Centos7上に構築したPostfix+Dovecotメールサーバの接続経路暗号化にはstartsslから取得した証明書を使用していましたが今回Let’sEncryptから証明書を取得し使用することにしました。その顛末と導入手順を公開します。
前提は、Let’sEncryptをWebサーバに導入済みであること、メールサーバ接続にTLSを使用する設定が済んでいること、独自ドメインの443ポートが公開されておりインターネットから接続できることです。関連する記事はこちらになります。
目次
1.証明書更新の動機
メールクライアントとして使用しているThunderBirdで先月中旬くらいから自ドメインのメール送受信ができなくなりました。Webメールでの送受信はできたのでしばらく放置していたのですが、いつまでたっても復旧しないのでその対処として最終的にはLet’sEncryptの証明書を導入しました。
当初は有効期限切れとか暗号強度の問題かと考え独自証明書を導入してみたのですが、すると今まではダンマリだったThunderBirdが「このサイトでは不正な証明書が使用されており、サイトの識別情報を取得できません。」などとエラー画面を出力し状況はもっとひどいことになってしまいました。
そこで、正当な証明書を発行してくれるLet’sEncrytでメールサーバの証明書を入手し設定することにしました。これならThunderbirdも文句はないでしょう。
2.証明書の取得
以下はLet’sEncrypt管理ツールcertbotをインストール済みの前提です。未導入の場合は当記事を参照して導入しておいてください。
(1)証明書の発行要求
独自ドメインの443ポートを公開しているサーバで以下のコマンドを発行します。Webサーバが起動しているとcertbotコマンドはエラーになってしまうので一時的にwebサーバを停止してから実行します。ここではnginxが起動していることとします。
1 2 |
# systemctl stop nginx # certbot certonly --standalone -d mail.hogehoge.com ←メールサーバのFQDNを指定 |
ここで証明書を取得するドメインとして「mail.hogehoge.com」を指定していますがこれは各自の環境に合わせて変更してください。メールクライアントで指定するメールサーバのFQDNと合わせておく必要があります。
(2)証明書の確認
以下のディレクトリ「etc/letsencrypt/archive/mail.hogehoge.com」に証明書が存在するか確認します。
1 2 3 4 5 |
# ls -la /etc/letsencrypt/archive/mail.hogehoge.com -rw-r--r-- 1 root root 1793 Nov 3 00:25 cert1.pem -rw-r--r-- 1 root root 1647 Nov 3 00:25 chain1.pem -rw-r--r-- 1 root root 3440 Nov 3 00:25 fullchain1.pem -rw-r--r-- 1 root root 1704 Nov 3 00:25 privkey1.pem |
「cert1.pem,chain1.pem,fullchain1.pem,privkey1.pem」の4ファイルが確認できました。このディレクトリには証明書の実体が保存され、証明書が更新されるごとに各ファイルの数字が1つUPした新しいファイルが追加されて行きます。
実際に設定で使用するのは最新の証明書シンボリックリンクとして登録される以下のディレクトリにあるAilias名です。
1 2 3 4 5 6 7 8 |
# ls -la /etc/letsencrypt/live/mail.hogehoge.com total 0 drwxr-xr-x 2 root root 75 Nov 3 00:25 . drwx------ 5 root root 67 Nov 3 00:25 .. lrwxrwxrwx 1 root root 38 Nov 3 00:25 cert.pem -> ../../archive/mail.hogehoge.com/cert1.pem lrwxrwxrwx 1 root root 39 Nov 3 00:25 chain.pem -> ../../archive/mail.hogehoge.com/chain1.pem lrwxrwxrwx 1 root root 43 Nov 3 00:25 fullchain.pem -> ../../archive/mail.hogehoge.com/fullchain1.pem lrwxrwxrwx 1 root root 41 Nov 3 00:25 privkey.pem -> ../../archive/mail.hogehoge.com/privkey1.pem |
3.メールサーバ証明書設定
(1)postfix設定
「main.cf」の以下2行、サーバ証明書と秘密キーに上記Alias名を設定します。
1 2 3 4 |
# vi /etc/postfix/main.cf smtpd_tls_cert_file = /etc/letsencrypt/live/mail.hogehoge.com/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/mail.hogehoge.com/privkey.pem #上記2行は変更箇所のみ抜粋 |
(2)dovecot設定
「10-master.conf」の以下2行をpostfixと同様に設定します。
1 2 3 4 |
# vi/etc/dovecot/conf.d/10-ssl.conf ssl_cert = </etc/letsencrypt/live/mail.hogehoge.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.hogehoge.com/privkey.pem #上記2行は変更箇所のみ抜粋 |
(3)設定反映
設定ファイルをリロードし証明書の修正をpostfixとdovecotに反映させます。
1 2 |
# systemctl reload postfix # systemctl reload dovecot |
4.総括
上記設定を実施した後、Thuderbirdを起動すると今度は問題無く独自ドメインからのメールを受信できました(セキュリティーの関係で画像などはありません)。
11/3時点でのGoogle検索ではこの問題の同件情報はなかったので推測とはなりますがThunderbirdのバージョンアップでセキュリティーが強化され、startsslの証明書を有効な証明書とみなさなくなったことが原因と考えられます。後でstartsslの証明書有効期限を確認すると2019年までになっていましたので有効期限切れが原因ではなかったようです。
今更ですが、Webサーバにlet’sencryptを導入した際に同時にメールサーバにも導入していれば何の問題もなかったのですが。手間を惜しんで仕事を後回しにすると痛い目に会うといういい教訓になりました。
5.参考にさせて頂いたサイト
SSLメールサーバ構築メモ Let’s Encrypt+Postfix+Dovecot(あぱーブログ様)
ありがとうございます。