Let's Encrypt 再入門
2021-2-13 19:06 JST

自分で偉そうに「Let's Encrypt はだいたい理解した」と書いて1年もしないうちにすでにほぼほぼすべて忘れている。結局 Let's Encrypt どーすればいいか!?

以下の自分のブログなどを参考に、再入門する。これとか

まず certbot は --webroot-path で指定されたディレクトリにアドホックな情報をつくります。今確認すると .well-known/acme-challenge/ というディレクトリをつくりその下にアドホックな情報を作るようです。その後、Let's Encrypt のサーバに -d で指定されたドメインの情報(URL)を渡します。この URL に Let's Encrypt はアクセスしに来ます。そこには .well-known/acme-challenge/ 以下に情報がある事でしょう。その情報の一致を見て正しいウェブサイトだと確認した上でセキュリティ情報(SSL)を払い出すようです。

その他、DNS を使った解決方法もあるようですが、上の URL を使う方法が一番簡単そうです。これなら nginx を動かしながら諸設定が出来ます。

また、nginx が動いていない場合は --standalone のオプションをつければcertbot 自身がウェブサーバになるようです。

バーチャルドメイン使っているので nginx の設定も変えておきます。

    location /.well-known/ {
        root   /var/www/html/;
    }

--dry-run オプションで実行します。

certbot certonly \
    --dry-run \
    --webroot-path /var/www/html \
    -m <メールアドレス> \
    -d <ドメイン名> --webroot

うまくいきました。あとは --dry-run を外すだけ。

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 2021.sinby.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - The dry run was successful.

似たようなことを前にも書いていた。

そして、その後、crontab で自動化している。

0 0 1 * * root /usr/bin/certbot renew
2 0 1 * * root /etc/init.d/nginx restart

たしか、certbot で renew しただけではだめで、 nginx の再起動が必要だった。あれ?これ、--post-hook に nginx の restart するべきなのでは?あとで、変更しておこう。renew に何も DNS の情報渡してないけどいいのだろうか?

ついでに http を https へ転送。

 return 301 https://$host$request_uri;