サーバー証明書自動更新設定手順
UCIDMのWebサーバーの証明書をACMEプロトコルで自動更新する手順を説明します。
前提条件
設定手順を説明するにあたって、以下の条件を前提とします。
- OSはRHEL系を利用していること
- WebサーバーはApache HTTPD サーバーを利用していること
- ACMEクライアントには
mod_mdを利用すること
設定手順概要
設定手順はおおまかに以下の通りです。
- 事前準備
mod_mdのインストールmod_mdの設定- 証明書の取得
事前準備
mod_md を利用するためには、Webサーバーに外部からHTTP/HTTPSでアクセスできる必要があります。
また、証明書を取得するドメイン名が、DNSで正しく引ける必要があります。
DNS設定やファイアウォール設定を事前に確認してください。
また、Apache HTTPDサーバーや、UCIDMの設定は事前に行ってください。
mod_md のインストール
以下のコマンドで mod_md をインストールします。
# dnf install -y mod_md
以下のコマンドで mod_md がロードされていることを確認してください。
# httpd -M | grep md
md_module (shared)
mod_md の設定
mod_md の設定を行います。
ここでは /etc/httpd/conf.d/md.conf に mod_md の設定を追加します。
<IfModule md_module>
MDContactEmail root@example.com
MDomain www.example.com
MDPrivateKeys RSA 4096
MDRenewWindow 10%
#MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory
MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
MDCertificateAgreement accepted
</IfModule>
MDContactEmailは証明書に関連する連絡先メールアドレスを指定します。MDomainは証明書を取得するドメイン名を指定します。複数のドメイン名を指定する場合はスペースで区切ってください。MDCertificateAuthorityは利用するACME認証局のURLを指定します。- ACME認証局のURL例は以下になります。
| ACME認証局 | URL |
|---|---|
| Let’s Encrypt 本番環境 | https://acme-v02.api.letsencrypt.org/directory |
| Let’s Encrypt 検証環境 | https://acme-staging-v02.api.letsencrypt.org/directory |
| UPKI電子証明書発行サービス | https://secomtrust-acme.com/acme/ |
また、UPKI電子証明書発行サービスのような、EAB Credentialが必要なACME認証局を利用する場合は、以下の設定も追加してください。
MDExternalAccountBinding <key-id> <hmac>
/etc/httpd/conf/httpd.conf も編集します。
すでに SSLCertificateFile や SSLCertificateKeyFile が設定されている場合はコメントアウトしてください。
<VirtualHost *:443>
...
#SSLCertificateFile /path/to/cert.pem
#SSLCertificateKeyFile /path/to/key.pem
SSLEngine on
...
</VirtualHost>
mod_md が証明書の取得に合わせて、読み込みまで行ってくれるので、これらの設定は不要になります。
また、ACMEプロトコルでは80番ポートをリッスンすることが必須になります。 そのため、80番ポートから443番ポートへのHTTPS通信へリダイレクトする設定を追加することを推奨します。
<VirtualHost *:80>
...
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
...
</VirtualHost>
mod_md のログを確認するには info 以上のログレベルが必要になります。
/etc/httpd/conf/httpd.conf に以下の設定を追加してください。
LogLevel md:info
すべての設定が完了したら、以下のコマンドでエラーが出ないことを確認してください。
# httpd -t
Syntax OK
証明書の取得
mod_md の設定が完了したら、Apache HTTPDサーバーは次回起動時に自動で証明書の取得を行います。
また mod_md は最初に、証明書を取得するためのHTTPS通信に利用する、一時的な自己署名証明書を自動で生成します。
そのため実際に公的な証明書を取得するには、Apache HTTPDサーバーを2回再起動する必要があります。
1度目の再起動を行います。
# systemctl restart httpd
/etc/httpd/state/md/domains/<ドメイン名>/ に自己署名証明書が生成されていることを確認してください。
# ls /etc/httpd/state/md/domains/www.example.com/
fallback-privkey.pem fallback-pubcert.pem ...
2度目の再起動を行います。
# systemctl restart httpd
/etc/httpd/state/md/domains/<ドメイン名>/ に公的な証明書が生成されていることを確認してください。
# ls /etc/httpd/state/md/domains/www.example.com/
privkey.pem pubcert.pem ...
ブラウザからアクセスし、証明書が正しく取得されていることを確認してください。
証明書の自動更新
mod_md では mod_watchdog というモジュールを利用して、定期的に証明書の有効期限を確認し、必要に応じて自動更新を行います。
そのため cron などで定期的にスクリプトやコマンドを実行する必要はありません。
mod_md が証明書を更新した際は error_log にログが出力されます。
以下のようなログが出力されていれば、自動更新が正常に動作しています。
[Mon Feb 09 15:03:11.588025 2026] [md:info] [pid 1111:tid 2222] AH10068: www.example.com: staged set activated
[Mon Feb 09 15:03:11.610129 2026] [md:info] [pid 1111:tid 2222] AH10071: mod_md (v2.4.26-git), initializing..