letsencrypt 認証更新の苦労話
自宅サーバーで,http から https にするために無料認証サイトの letsencrypt を使っている人がおられると思います.私もその一人です.私の場合,ウェブサーバーに nginx を使って,standalone モードで,letsencrypt の認証を取りました.認証期間は3ヶ月なので,3ヶ月に1回,認証の更新をしなくてはなりません.認証の更新は,
sudo certbot renew
で出来るを思っていたのですが,ここで問題が発生しました.このコマンドを実行したところ,以下のようなエラーが出ました.
Domain: xxxxxx.com
Type: unauthorized
Detail: Incorrect validation certificate for tls-sni-01 challenge.
Requested
4a81af06afba487c0919ea6fb7cd08c0.7b721688772661b46a23d5e3b9b7b666.acme.invalid
from xxx.yyy.zzz.uuu:443. Received 2 certificate(s), first
certificate had names "xxxxxx.com"
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
ただし,このメッセージで,domain名は,xxxxxx.com,IP addressは,xxx.yyy.zzz.uuu に変更してあります.
そこで,更新のプロトコールを tls-sni-01 から http-01 に変えてみました.これは,
sudo certbot renew --preferred-challenges http
で行います.すると,今度は,
http://xxxxxx.com/.well-known/acme-challenge
が見つからないと言うエラー(404)が出ました.そこで,上記に対応する directory を作りました.私の場合,HP のルートが /usr/local/www/nginx なので,
/usr/local/www/nginx/.well-known/acme-challenge
を作って,nginx.conf に,
location /.well-known/acme-challenge {
default_type "text/plain";
root /usr/local/www/nginx;
}
を書き足しました.しかし,その後も同じエラーが出ました.
ここで困って,
https://community.letsencrypt.org/
に助けを求めたところ,standalone の場合,あらかじめ,nginx を止めないとだめだとのこと.そこで,
sudo service nginx stop
sudo certbot renew --preferred-challenges http
sudo serivce nginx start
としたところ,見事,認証の更新に成功しました.
その後,教えてもらったのですが,
/etc/letsencrypt/renewal-hooks/pre と /etc/letsencrypt/renewal-hooks/post にそれぞれ,nginx をストップするscriptとスタートするscriptをあらかじめ作って置いておくと,自動的に nginx の操作をしてくれるそうです.
certbot は,実情を表さないエラーメッセージをだすため,いろいろ苦労しましたが,ようやく認証更新が出来るようになりました.