先日、なぜかlet’s Encryptから「証明書の期限があと10日で切れるから更新してください」というメールが来た。
このブログを立ち上げてからもう2,3年近く経っていて、最初に自動更新の設定をしたはずで、実際これまでこんなメールが来たことはなかった。自動更新が機能しなくなっているのかもしれない。
もう、はじめにどう設定したかも覚えていない。
結論を先に
結局、私のブログサーバーはAWSのbitnamiを使っていたから、以下の手順で更新&自動更新設定をした。逆にこれまでどうやって自動更新されていたかが不思議。
- snapでcertbotをインストールする(これは必要なのか不明)
- bitnamiのSSL設定の公式ドキュメントのStep 5にしたがって、まず手動更新(あと6時間ぐらいだったから)
- 同じくStep 5にしたがって自動更新設定
SSL通信のおさらい
以下の記事がわかりやすい。
https://ssl.sakura.ad.jp/column/ssl/
設定内容
- 443ポート開放(https通信のため)
- 秘密鍵&公開鍵の作成
- サーバー証明書の取得
をしておけば良い。流れとしては、
- 秘密鍵&公開鍵の作成
- CSR(Certificates Signing Request)の作成
- 発行したい証明書のコモンネームや組織名が書かれている
- CSRを元にサーバー証明書を発行を申請する
- CSRは発行申請書のようなもの
- Let’s Encryptなどの認証局に申請して、証明書を発行してもらい、それをサーバーに置いておく
試したこと
certbotのインストール
サーバーの中を見てみたら、/etc/cron.d/certbot
があり、ちゃんと自動更新設定がされていた。しかし、certbot
コマンドがない。
詳しくみてみてると、/usr/bin/certbot
は/snap/bin/certbot
へのシンボリックリンクになっていて、リンク先が存在しなかった。なぜかは不明だが、snap経由でインストールしたcertbotが消えたらしい。何もいじっていないはずだからちょっと怖い。
とりあえず、以下のコマンドでcertbotをインストールした。
# 念の為、
sudo apt-get remove certbot
# snapでインストール
sudo snap install --classic certbot
で、/snap/bin/certbot
に入ったのでコマンドが使えるようになった。
更新のための設定ファイルがない
本来、取得時に自動的に作成されるみたいだが、これも無かった(なくなっt??)。
/etc/letsencrypt/renewal/${DOMAIN}.conf
というパスで作れば良いらしい。内容はこのサイトを参考にして手動作成、と思ったが、各設定値を正しく設定できる自信がないためやめた。
証明書失効&再取得&自動更新設定
結局、一旦証明書を失効させてから再取得を試すことに。
sudo certbot revoke --cert-path '証明書のパス'
で、プロンプトが出てきてメールアドレス入力したが、認証エラーで失効させることもできず。。
色々調べてみると、bitnamiにSSL設定の方法も用意されているらしい。
AWS bitnamiインスタンスを利用していることを思い出し、bitnamiでのSSL設定の公式ドキュメントをみて全て解決。
とりあえず証明書をすぐに更新するには、以下のコマンド。ドキュメントのStep 5にしたがって、
sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start
これで、指定ドメインで、90日間(letsencryptの最長期間)有効になるように更新される。
であとは公式ドキュメントの以降の内容に従って自動更新スクリプトを作り、cronに設定すれば良い。