Ubuntu + nginx 上で Freenom + Let's Encrypt を使って HTTPS 化する
以前、GCE 上の CentOS + Apache にて、Freenom で独自ドメインを取り、Let's Encrypt (certbot) で HTTPS 化する方法を紹介した。
今回は同じく、Freenom で無料独自ドメインを取り、Let's Encrypt (certbot) で SSL 証明書を取得するのだが、実行基盤が Ubuntu + nginx となる。GCE ではなく OCI で行った。
目次
Freenom 独自ドメインを取得する・DNS 設定する
前回の記事と同じなので省略。
Freenom で独自ドメインを取ったら、Freenom の DNS 設定画面で、対象のサーバの Public IP への A レコードを登録する。こうすると、
という HTTP でのアクセスができるようになるはず。
Let's Encrypt でサーバ証明書を取得する
ココのやり方が、前回とは違うところ。
CentOS では certbot を Yum でインストールしたが、Ubuntu では git clone
で certbot-auto
を取得して作業してみる。
# root ユーザに切り替える
sudo su -
# certbot を取得する
git clone https://github.com/certbot/certbot
cd ./certbot/
./certbot-auto --help
# 次の要領で、コマンド一発でサーバ証明書を発行する
./certbot-auto certonly --webroot -w /var/www/html -d neos21-oci.ml -m neos21@gmail.com --agree-tos -n
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for neos21-oci.ml
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/neos21-oci.ml/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/neos21-oci.ml/privkey.pem
Your cert will expire on 2020-11-20. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
certonly
コマンドに -m
とか --agree-tos
とか -n
いうオプションを付けている。コレにより、利用規約の確認を省略したり、メールアドレスの入力を省略したりできる。コマンドを一発流すだけで、証明書ファイルが生成されている。
# ちなみに -m (--email) オプションがないまま --agree-tos を書いてもダメ
# You should register before running non-interactively, or provide --agree-tos and --email <email_address> flags.
nginx 設定ファイルにサーバ証明書を読み込ませる
certbot-auto で生成された証明書関連のファイルは次の2つ。
/etc/letsencrypt/live/neos21-oci.ml/fullchain.pem
/etc/letsencrypt/live/neos21-oci.ml/privkey.pem
コレを nginx の設定ファイルで読み込めるようにしていく。
$ vi /etc/nginx/conf.d/default.conf
server {
server_name localhost;
listen 80;
# 以下3行を追加する
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/neos21-oci.ml/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/neos21-oci.ml/privkey.pem;
# 以下省略…
}
こんな感じで、80番ポートと443番ポートを両方開けておきつつ、443番ポートの方は ssl
を指定する。そして ssl_certificate
および ssl_certificate_key
でサーバ証明書ファイルを指定している。
設定ができたら、設定ファイルの構文チェックを行い、nginx を再起動する。
$ nginx -t
$ systemctl restart nginx
設定ができたら、
というように、HTTPS でアクセスできることを確認する。
サーバ証明書を自動更新する
コレも以前の記事とほとんど同じ。
$ crontab -l
00 03 01 * * /root/certbot/certbot-auto renew && systemctl restart nginx
こんな cron を定義しておけば、毎月1日の深夜3時に、証明書を更新してくれる。
以上〜。