Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

サーバー証明書自動更新設定手順

UCIDMのWebサーバーの証明書をACMEプロトコルで自動更新する手順を説明します。

前提条件

設定手順を説明するにあたって、以下の条件を前提とします。

  • OSはRHEL系を利用していること
  • WebサーバーはApache HTTPD サーバーを利用していること
  • ACMEクライアントには mod_md を利用すること

設定手順概要

設定手順はおおまかに以下の通りです。

  1. 事前準備
  2. mod_md のインストール
  3. mod_md の設定
  4. 証明書の取得

事前準備

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.confmod_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 も編集します。 すでに SSLCertificateFileSSLCertificateKeyFile が設定されている場合はコメントアウトしてください。

<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..
Last updated on 2026-02-10 12:36 +0900 (main@4753a72)