Certbot を使って Let' Encrypt の SSL 証明書を取得するには、外部に公開された Web サーバーか DNS サーバーで認証する必要があります。
ConoHa VPS に検証用として RHEL9 の設定を進めているのですが、現状では Web サーバーを外部には公開しておらず、管理者の IP アドレスからしかアクセスできない設定になっています。
Certbot の DNS 認証を使えば、非公開の Web サーバー用の SSL 証明書を取得でき、ワイルドカード証明書も取得できるので一石二鳥ですが、更新のたびに DNS を手動で書き換えるのは手間になります。
探してみたところ、ConoHa API を使って自動で TXT レコードを書き換えてくれるスクリプトがありましたので、これを使った設定方法を記録しておきます。
Let's Encrypt の証明書を取得
Certbot のインストール
EPEL リポジトリから Certbot をインストールします。
1 | # dnf install certbot |
※EPEL リポジトリが未導入の場合は下記を参考に入れてください。
letsencrypt-dns-conoha のセットアップ
ConoHa API を介して認証用コードを自動的に設定してくれるスクリプトなのですが、オリジナルでは tyo2 リージョンに対応していなかったので、フォークされたものを使用しました。(https://github.com/tsukumijima/letsencrypt-dns-conoha)
git コマンドで一式をダウンロードします。
1 | # git clone https://github.com/tsukumijima/letsencrypt-dns-conoha.git |
Let's Encrypt ディレクトリ内で完結させたいので、/etc/letsencrypt にファイル一式を移動します。
1 | # mv letsencrypt-dns-conoha/ /etc/letsencrypt/conoha |
スクリプトファイルに実行権限を付与します。
1 | # chmod +x /etc/letsencrypt/conoha/*.sh |
設定ファイル(.env)をリネームします。
1 | # mv /etc/letsencrypt/conoha/.env.example /etc/letsencrypt/conoha/.env |
ConoHa コントロールパネルから API のタブに移動し、API のユーザーネームとパスワード、テナント ID を確認します。また、エンドポイントの URL からリージョン(tyo1 か tyo2)もあわせて確認します。
※API ユーザーが設定されていない場合は作成してください。パスワードを設定するだけで、ユーザー名は自動的に割り当てられます。
上記の内容を、letsencrypt-dns-conoha の設定ファイルに記載します。
1 | # vi /etc/letsencrypt/conoha/.env |
また、スクリプト内で jq コマンドを使用しますので、インストールしておきます。
1 | # dnf install jq |
以上で、準備は完了しました。
SSL 証明書の取得
実際に SSL 証明書を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # certbot certonly \ --manual \ --agree-tos \ --no-eff-email \ --manual-public-ip-logging-ok \ --preferred-challenges dns-01 \ --server https://acme-v02.api.letsencrypt.org/directory \ -d "example.com" \ -d "*.example.com" \ -m "root@example.com" \ --manual-auth-hook /etc/letsencrypt/conoha/create_conoha_dns_record.sh \ --manual-cleanup-hook /etc/letsencrypt/conoha/delete_conoha_dns_record.sh Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem |
このとき指定したオプションは /etc/letsencrypt/renewal/example.com.conf に保存され、更新(certbot renew)時にも自動的に指定されます。
証明書の自動更新
Cron で月に一度、更新を試みるように設定します。
1 | # vi /etc/cron.monthly/certbot |
更新後に Web サーバーの証明書を反映するため、post-hook でリロードさせます。
1 2 | #!/bin/sh certbot renew --post-hook "systemctl reload httpd.service" |
実行権限を付与します。
1 | # chmod +x /etc/cron.monthly/certbot |
以上で Let's Encrypt のワイルドカード SSL 証明書を自動運用する事ができるようになりました。
コメント