Let's Encrypt Linux Ubuntu

【Certbot】Let's Encriptでワイルドカード証明書を取得

Certbotを利用しLet's Encriptで無料のワイルドカード証明書を取得します。

Certbotの公式が充実してきているのでその通りにやるだけでよいのですが、
追いかけながら簡単に解説していきます。

ここではUbuntu 22.04 LTS / Nginx の環境にて進めていきます。

この記事執筆時点では公式の選択肢にはUbuntu22はないのでUbuntu20を選択し
こちらに合わせて実行します。

1. sudo 権限をもつユーザーでssh接続

2. snapdのインストール

インストール、とは書いていますが最近のUbuntuならデフォルトで入っています。
$ snap --version
で存在確認しておきましょう。もし入っていなければこちらからOSを選んでいってインストールを進めましょう。
入っていなくても、最近のでデフォルトになっているくらいなので特に気にせずインストールしてしまうとよいです。

3. snapdのアップデート

さてここから本番といったところです。まずはアップデートをします。

$ sudo snap install core; sudo snap refresh core

4. certbot-auto や他のcertbotパッケージの削除

もし、すでにcertbotをsnapd以外からインストールしていた場合は削除します。
インストールしたか覚えがなければとりあえず実行してしまえばOKです。

$ sudo apt-get remove certbot

公式には

If you previously used Certbot through the certbot-auto script, you should also remove its installation by following the instructions here.

https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal

と、certbot-autoで旧Certbotを使ってたならこっちの方法でインストールも削除してね、とあるんですが"こっち"のリンクが切れています。。。

5. Certbotのインストール

下記実行します。

$ sudo snap install --classic certbot

6. certbotコマンドの準備

コマンドのリンクを貼ります。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

これでcertbotコマンドが実行できるようになりました。

7. 証明書の取得(とインストール)

ここでは選択肢が2つあります。インストールをするかしないかになります。
ここでいうインストールはNginxの設定の自動追加です。

// Nginxの設定もやって欲しい場合は
$ sudo certbot --nginx

// Nginxの設定は自分でやるので不要な場合は
$ sudo certbot certonly --nginx

を実行します。

Nginxの設定もやってもらう
sudo certbot --nginx
を実行した場合、
1. メールアドレス
2. 利用規約に同意するか
3. Certbot開発しているElectronic Frontier Foundationにメールアドレスを共有してニュースとかキャンペーンのメール受け取るか
4. ドメイン

を聞かれます。

メールアドレスはちゃんと普段メールを見るアドレスを設定しましょう。
もし更新が失敗して期限が切れそうになった場合などにメールがくるので
証明書切れでサイトにアクセスできないといったことになる前に対応できるようになります。
メールアドレスを入力してEnterしましょう。

利用規約は同意が必要です。Yを入力してEnterしましょう。
キャンペーン等のメール受け取るかは自由です。YかNを入力してEnterします。

ドメインはhttpなどは不要です。
example.com
というように入力してEnterを押しましょう。

8. 自動更新のテスト

$ sudo certbot renew --dry-run

を実行してdry run(テスト実行)できます。
Congratulations, all simulated renewals succeeded:
というようなメッセージが表示されれば更新できる状態です。

更新できることを確認したらcrontabに定期実行の設定を入れます。

$ crontab -e

を実行し、下記のようにcronを設定します。

0 2 5,20 * * sudo certbot renew && sudo service nginx reload

0分 2時 5日または20日 に実行するように設定しています。
この例では証明書の更新ができるのが期限切れ30日前からなので月2回実行するようにし、
月初や月末は処理が必要なことも多いので避けるためずらしています。
時間は深夜2時でアクセスが少なそうな時間ですね。
これはもちろん状況に応じて日時は変更してください。

証明書の更新後にnginxのreloadを実行して証明書の更新を反映するようにしています。

これで完了です!
以前はポート開けたりと色々面倒だった覚えがあるのですが、かなり簡単になりましたね。

-Let's Encrypt, Linux, Ubuntu