前回は、自己証明書で暗号化(SSL化)を進めましたが、MUAによっては証明書検証でエラーが出ることがあるため、問題となる場合があります。そのため、今回は、Let’s Encrypt という無料のドメイン認証(DV)証明書を発行してくれるサービスを利用して、暗号化(SSL化)する方法を紹介します。
メールサーバーを構築するにあたり、SMTP認証やメール(SMTP)の暗号化などの概要を理解したい方は以下を参考にしてください。
Let’s Encrypt について
Let’s Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行し、TLS や HTTPS を普及させることを目的としているプロジェクトです。2016年4月12日 に正式サービスが開始されました。非営利団体の ISRG (Internet Security Research Group) が運営しおり、シスコ(Cisco Systems)、Akamai、電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、スポンサーとして支援しています。
なお、Let’s Encryptで発行される証明書は、有効期限が3ヵ月であるため、期限が切れる前に更新が必要です。詳しくは、公式サイトをご確認ください。
Let’s Encryptで証明書を発行する
Let’s Encryptで証明書を発行するには、certbot という Let’s Encrypt が発行しているツールを利用します。CentOSでは、以下のコマンドでインストールできます。
# yum -y install certbot
今回は、http通信を利用して証明書を発行するため、ファイヤウォールでTCPの80ポートを許可します。
# firewall-cmd --reload
本サーバーはメールサーバで webサーバーがないため、certbot スタンドアロンモードで動作させ、certbot でweb通信を実施し証明書を取得します。以下のコマンドで、certbot を起動します。(以下では、自身のドメインは example.com として紹介しています。)
mx.example.com は、Postfixの設定で myhostname に設定した、完全修飾ドメイン(DNSで名前が引けるMXレコード)を指定します。証明書の更新日が近くなると、指定したメールアドレスにメールが届きます。
以下のコマンドで、証明書が取得できていることが確認できます。それぞれ最新へのシンボリックリンクとなっています。(※ 更新の度に自動更新されるので、証明書としてシンボリックリンクを利用ます。)
取得したファイルの意味は、以下の通りです。
- privkey.pem:SSL/TLS サーバ証明書の公開鍵に対応する秘密鍵
- cert.pem:SSL/TLS サーバ証明書(公開鍵を含む)
- chain.pem:中間証明書
- fullchain.pem:中間証明書とサーバ証明書
その他 certbot の詳しい利用法は、以下を参照するのが良いです。
https://letsencrypt.jp/usage/#GetCertificate
https://letsencrypt.jp/docs/using.html
注意することは、現在(私が試したのは、2018/9/22 頃) ドメイン使用権の認証方法の1つである tls-sni-01 は、他人のドメイン名でサーバ証明書取得ができてしまう脆弱性あるらしく、利用ができないようです。
http-01 か、dns-01 を指定します。
Postfixの設定
/etc/postfix/main.cf に以下の設定を追加します。(※ 前回 自己証明書を設定している場合は、それを書き換えます。)
1 2 | smtpd_tls_key_file = /etc/letsencrypt/live/mx.example.com/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mx.example.com/fullchain.pem |
Postfixを再起動します。
Dovecotの設定
/etc/dovecot/conf.d/10-ssl.conf に以下の設定を追加します。(※ 前回 自己証明書を設定している場合は、それを書き換えます。)
1 2 | ssl_cert = </etc/letsencrypt/live/mx.example.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mx.example.com/privkey.pem |
Dovecot を再起動します。
自動更新
以下のコマンドで、cron で「毎週 日曜日の2時20分」に証明書の更新を行う設定をします。証明書の更新が行われた場合、PostfixとDovecotの再起動を行います。(※ 証明書は、有効期限切れの1ヵ月前から更新可能になります。更新されなかった場合は、サーバーの再起動は行われません。)
# chmod 400 /etc/cron.d/renew_letsencrypt