昔は,まともなSSL/TLSの証明書*1を取得するには,有料サービスに毎年数万円を支払う必要がありました.また証明書の申請には数日かかります.一度更新手続きや支払いを忘れると,数日間証明書が失効し,その間サービスがが止まってしまう,という恐ろしい事故もおきていました.
しかし今は Let's Encrypt があります.無料で証明書を発行してくれますし,申し込むとその場で証明書は発行されます.更新も自動です.
という訳で, Let's encrypt を使ったSSLの設定方法をまとめます.
具体的には
について手順を書きます.imap やpop3などの他のサービスは,postfix の手順を参考にすればOKなので,ここでは説明は割愛します
なお説明は debian を前提におこないます. ubuntu も同じ方法で設定できるはずです.
let's encrypt の管理コマンドのインストール
apt でインストールできます
$ apt install python-certbot-apache
古い debian だと python-certbot-apache がありませんので backport を使います
まず debian のバージョンを確認します
$ cat /etc/os-release
例えば PRETTY_NAME が Debian GNU/Linux 8 (jessie) であれば,debianのバージョンは jessie なので
jessie-backport というapt line を登録します
登録手順は以下の通り.まず,新しい設定ファイル /etc/apt/sources.list.d/backport.list を用意して,以下の内容を記述します
deb http://ftp.debian.org/debian jessie-backports main
次に
$ sudo apt update
でデータベースを更新します.うまく行けば以下のコマンドで jessie-backports から python-certbot-apache が導入できます
$ apt install python-certbot-apache -t jessie-backports
apache の設定
上記の手順で管理ツール certbot というコマンドがインストールされます.これを使って SSLの証明書の入手,とapacheの設定を行います
$ sudo certbot --apache
設定はこれだけで終わりです. https でapacheにアクセスしてみましょう
確認
SSLの証明書は /etc/letsencrypt 以下に保存されます.
重要なファイルは /etc/letsencrypt/live/<ドメイン名>/ 以下にある,以下の3つのファイルです
- fullchain.pem
- 証明書(公開鍵).apache など大抵のソフトウェアはこのファイルを使います
- chain.pem
- 証明書(公開鍵).上記証明書と同じものですが,ファイル形式が異なります.Nginx などはこちらを使います
- privkey.pem
- 証明書の秘密鍵.
debian の apache2 の場合は /etc/apache2/sites-available/010-ssl.conf あたりで
SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem
という感じでファイルが指定されることになります
postfix の設定
/etc/postfix/main.cf に,以下の設定を追加します
smtpd_tls_cert_file = /etc/letsencrypt/live/<ドメイン名>/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/<ドメイン名>/privkey.pem smtpd_tls_CAfile = /etc/letsencrypt/live/<ドメイン名>/chain.pem smtpd_use_tls=yes
自動更新の設定
以下のコマンドを実行すると,自動で systemd 経由で,証明書を自動更新するようになります
$ sudo certbot renew
確認します
$ sudo systemctl |grep certbot
を実行して
certbot.timer loaded active waiting Run certbot twice daily
の部分があれば設定は完了です
動作ログは /var/log/letsencrypt/letsencrypt.logです
let's encrypt の証明書は有効期限が3ヶ月あるので,更新は3ヶ月に一回で十分です
更新が不要な場合は 上記ログには"Cert not yet due for renewal"というメッセージが記録されます