debian で無料のSSL/TLS証明書(Let's Encrypt) を使う

昔は,まともなSSL/TLSの証明書*1を取得するには,有料サービスに毎年数万円を支払う必要がありました.また証明書の申請には数日かかります.一度更新手続きや支払いを忘れると,数日間証明書が失効し,その間サービスがが止まってしまう,という恐ろしい事故もおきていました.

しかし今は Let's Encrypt があります.無料で証明書を発行してくれますし,申し込むとその場で証明書は発行されます.更新も自動です.

という訳で, Let's encrypt を使ったSSLの設定方法をまとめます.

具体的には

について手順を書きます.imappop3などの他のサービスは,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

設定はこれだけで終わりです. httpsapacheにアクセスしてみましょう

確認

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"というメッセージが記録されます

*1:ブラウザやOSに標準で認証局が登録されているやつ