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 |
設定ファイル(.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 |
以上で、準備は完了しました。
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)時にも自動的に指定されます。
Web サーバーの設定
続いて Web サーバーの設定をしていきます。他にも設定を入れましたが、SSL 証明書を読み込む部分だけ抜粋します。
Apache のインストール
1 |
# dnf install httpd mod-ssl |
SSL の設定ファイルに、先ほど取得した証明書を指定します。
1 2 3 4 5 6 7 8 |
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem #SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem 追加 SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem |
Apache の起動と自動起動の設定します。
1 2 3 |
# systemctl start httpd.service # systemctl enable httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. |
証明書の自動更新
Cron で月に一度、更新を試みるように設定します。
1 |
# vi /etc/cron.monthly/certbot |
更新後に Apache の証明書を反映するため、post-hook でリロードさせます。
1 2 |
#!/bin/sh certbot renew --post-hook "systemctl reload httpd.service" |
実行権限を付与します。
1 |
# chmod +x /etc/cron.weekly/certbot |
以上で Let's Encrypt のワイルドカード SSL 証明書を自動運用する事ができるようになりました。
コメント