Apache httpd : mod_md の設定2025/12/03 |
|
[mod_md] を設定して、Let's Encrypt から取得する SSL/TLS 証明書の 取得/更新 を自動化します。
設定をしたい対象のバーチャルホストごとに設定可能です。 また、Let's Encrypt から手動で取得する際と同様、設定をしたい対象のサイトは、インターネット側からアクセス可能である必要があります。 |
|
| [1] | [mod_md] はパッケージに含まれているため、パッケージの追加インストールは不要です。 |
|
www:~ #
vi /etc/apache2/conf.d/acme.conf # 新規作成
LoadModule md_module /usr/lib64/apache2-event/mod_md.so
LoadModule status_module /usr/lib64/apache2-event/mod_status.so
LoadModule watchdog_module /usr/lib64/apache2-event/mod_watchdog.so
MDBaseServer on
MDCertificateProtocol ACME
MDCAChallenges http-01
MDDriveMode auto
MDPrivateKeys secp384r1
MDRenewWindow 33%
MDStoreDir /etc/apache2/md
MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
MDCertificateAgreement https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf
<Location "/md-status">
SetHandler md-status
Require ip 127.0.0.1 10.0.0.0/24
</Location>
# [MDRenewWindow]
# 証明書を更新するタイミングを指定する
# 指定しない場合のデフォルトは [33%]
# Let's Encrypt の有効期限 = 90日
# 90日 * 33% ≒ 30日 ⇒ 残り30日で更新される
# 日数で指定する場合の記号は [d]
# 30日 ⇒ [30d]
# [MDStoreDir]
# 証明書等の各種データの保存ディレクトリ
# 指定しない場合のデフォルトは [md]
# [ServerRoot] からの相対パス
# [md-status]
# MD の状態をモニタリングする
systemctl restart apache2
|
| [2] | SELinux を有効にしている場合は、ポリシーの変更が必要です。 |
|
www:~ # setsebool -P httpd_can_network_connect on
www:~ #
vi mod-md.te # 以下の内容で新規作成
module mod-md 1.0;
require {
type httpd_config_t;
type httpd_t;
class dir { add_name create remove_name rename reparent rmdir setattr write };
class file { create rename setattr unlink write };
}
#============= httpd_t ==============
allow httpd_t httpd_config_t:dir { add_name create remove_name rename reparent rmdir setattr write };
allow httpd_t httpd_config_t:file { create rename setattr unlink write };
checkmodule -m -M -o mod-md.mod mod-md.te www:~ # semodule_package --outfile mod-md.pp --module mod-md.mod www:~ # semodule -i mod-md.pp |
| [3] | 対象のバーチャルホストごとに設定します。 各 [ServerAdmin] には Let's Encrypt からの各種通知を受け取ることが可能な、有効なメールアドレスを指定する必要があります。 |
MDomain rx-9.srv.world
MDCertificateAgreement accepted
DirectoryIndex index.html
ServerAdmin root@rx-9.srv.world
<VirtualHost *:80>
DocumentRoot /srv/www/rx-9.srv.world
ServerName rx-9.srv.world
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
DocumentRoot /srv/www/rx-9.srv.world
ServerName rx-9.srv.world
</VirtualHost>
<Directory "/srv/www/rx-9.srv.world">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
www:~ #
systemctl reload apache2
# 初回起動時は各設定のチェックが実行され # [MDStoreDir] に設定したディレクトリ内に起動のためのダミー証明書が作成される www:~ # ll /etc/apache2/md/domains/rx-9.srv.world total 12 -rw-------. 1 root root 306 Dec 3 10:40 fallback-privkey.secp384r1.pem -rw-------. 1 root root 713 Dec 3 10:40 fallback-pubcert.secp384r1.pem -rw-------. 1 root root 609 Dec 3 10:40 md.json # 問題なければ正規の証明書が取得される www:~ # ll /etc/apache2/md/domains/rx-9.srv.world total 36 -rw-------. 1 root root 21618 Dec 3 10:47 job.json -rw-------. 1 root root 661 Dec 3 10:47 md.json -rw-------. 1 root root 306 Dec 3 10:47 privkey.secp384r1.pem -rw-------. 1 root root 2900 Dec 3 10:47 pubcert.secp384r1.pem |
| [4] | 有効期限等々、証明書の確認は [openssl] コマンドで実施可能です。 または、[2] で設定した [md-status] にアクセスすることでも確認できます。 |
|
www:~ # openssl s_client -connect rx-9.srv.world:443 | openssl x509 -noout -startdate -enddate depth=2 C=US, O=Internet Security Research Group, CN=ISRG Root X1 verify return:1 depth=1 C=US, O=Let's Encrypt, CN=E7 verify return:1 depth=0 CN=rx-9.srv.world verify return:1 notBefore=Dec 3 00:48:39 2025 GMT notAfter=Mar 3 00:48:38 2026 GMT |
|
| Sponsored Link |
|
|