Ubuntu 16.04のnginxにLet's Encryptを導入する。

Let’s Encrypt は自動化されていてオープンな認証局(CA)です。 SSL/TLSサーバー証明書を無料で取得することができます。

ここではUbuntu 16.04のNginxで利用するために,Let’s EncryptからSSL/TLSサーバー証明書を入手した手順を公開します。

前提として,ドメイン(example.com)は登録済みで,ホスト(blog.takedato.com)のDNSレコードも設定済みとします。また,Nginxの設定は証明書の部分以外の終わっているものとします。

1. letsencryptをインストールします。

$ sudo apt-get install letsencrypt

2. Let’s Encryptからサーバー証明書を取得します。

$ sudo letsencrypt certonly --standalone -d blog.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.example.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.example.com/privkey.pem
   Your cert will expire on 2018-07-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

3. Nginxの設定をします。

サーバーの設定ファイル(たとえば,sites-enabled/blog.example.com.conf)を以下のように証明書を指定するように変更します。

server {
  listen 443;
  server_name blog.example.com;

  ssl on;
  ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;

Nginxをリロードするとhttpsでアクセスできるようになっているはずです。

4. 更新の設定。

Let’s Encryptの証明書は90日で切れるので,定期的な更新が必要です。crontabを設定して,証明書を更新します。

$ sudo crontab -e

crontabの内容の例。月曜(1)の4時30分に証明書が更新されて,35分にnginxがリロードされる。

# m h  dom mon dow   command
30 4 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
35 4 * * 1 /bin/systemctl reload nginx