このブログに限らず自分の運営している Web サイトはすべて Let's Encrypt を利用して SSL 化しているため、サーバー移行した際には SSL の設定も行う必要があった。新しいサーバーでも Let's Encrypt を利用して SSL の設定を行おう。
まず Let's Encrypt を利用するためのコマンド certbot-auto をインストールする。これは certbot.eff.org よりダウンロードできる。
$ sudo wget https://dl.eff.org/certbot-auto -O /usr/sbin/certbot-auto
$ sudo chmod a+x /usr/sbin/certbot-auto
Ubuntu なら apt でもインストールできるようだ。
certbot-auto コマンドが利用できるようになったら証明書を取得する。
$ sudo certbot-auto certonly -d example.com
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator nginx, Installer None
(省略)
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
(省略)
認証を行う際に httpd が必要となるが既に Nginx が動いていたので 1 を選択した。何もサーバーが立ち上がっていなければ standalone の 2 を選択する。
正常に認証できれば上記のように "Congratulations!" と言われると思う。SSL に必要な fullchain.pem と privkey.pem などのファイルが保存される。これらファイルを Nginx の設定ファイルより読み込もう。
$ sudo vim /etc/nginx/sites-available/example.com
# http:// へのアクセスはすべて https:// へリダイレクトする
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /home/ryomatsu/public_html/example.com;
server_name example.com www.example.com;
# 省略
}
最後に設定ファイルが正常か確認して Nginx を再起動しよう。
$ sudo nginx -t
$ sudo systemctl restart nginx
これで https でアクセス可能だ。
Lets' Encrypt の証明書は3か月で切れるので都度 sudo certbot-auto renew
コマンドを利用して更新しなければならない。手動でやるのは面倒なので crontab にでも登録しておこう。