Let's Encrypt を certbot で設定した覚書 2024年版
(FreeBSD / Apache)

2024-05-04

以前から Let's Encrypt を利用させてもらって https サイトを運営していたが、年月が経って、最初に設定した時と certbot 周りが違ってきているのではないかと薄々思っており、サーバをインストールし直すのを機に、最初から設定することにした。

● 情報

あらためて、Let's Encrypt の公式情報は何処なのか少し探したが、以下を参考にする。

Certbot (https://certbot.eff.org/)

「My HTTP website is running [Software] on [System]」 となっている所で、Software を「Apache」、System を「FreeBSD」を選択。

● 作業

certbot をインストールする。
今回、ウェブサーバのハードウェアが非力なので、ports ではなく pkg を利用。
情報に書かれている通り、sudo pkg install security/py-certbot-apache を実行した。

次に、sudo certbot --apache を実行したのだが.. どうもうまくいかないようだ。
どうやら、何をやっても、以下のエラーになる。

Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.

ファイアウォールなのかとか、Apache は停止した状態でやるのかとか (なお停止させるとよけいうまくいかない)、非常に悩んだ。

挙げ句、このエラーメッセージ全部を突っ込んで web を検索してみた所..
どうも、VirtualHost を定義せよというものが多い。

筆者のウェブサーバはドメイン 1個しかないので VirtualHost などこれまで定義していなかった。

半信半疑で、検索した情報を参考に、以下のようなものを httpd.conf の末尾に追記した。


<VirtualHost *:80>
	ServerAdmin 〜@〜〜.〜
	DocumentRoot /home/www/apache24/data
	ServerName ドメイ.ン
</VirtualHost>

(これまでもそうだが httpd.conf を変更したら sudo service apache24 restart を実行する)

すると、なんと.. sudo certbot --apache が少し先まで進んだ。

まだエラーになる。

Error while running apachectl configtest.
Performing sanity check on apache24 configuration:

AH00526: Syntax error on line 1 of /usr/local/etc/apache24/le_http_01_challenge_pre.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Error while running apachectl configtest.
Performing sanity check on apache24 configuration:

AH00526: Syntax error on line 1 of /usr/local/etc/apache24/le_http_01_challenge_pre.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

httpd.conf の中の以下の行のコメントアウトを外した。


LoadModule rewrite_module libexec/apache24/mod_rewrite.so

これで sudo certbot --apache で、ようやっと証明書の取得までは出来たようだ。
が、Apache の設定に反映できていないというようなエラーになった。

Deploying certificate
Could not install certificate

NEXT STEPS:
- The certificate was saved, but could not be installed (installer: apache). After fixing the error shown below, try installing it again by running:
certbot install --cert-name ドメイ.ン
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.

Could not find ssl_module; not installing certificate.

httpd.conf の中の以下の行のコメントアウトを外す。 (試行錯誤していたのでコメントアウトに戻していた)


LoadModule ssl_module libexec/apache24/mod_ssl.so

実は以下の行もコメントアウトを外したのだが、後からコメントアウトに戻した所、それでも Apache は作動しているようだった。


LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so

以前からこの行はコメントアウトを外していたのだが、今回は不要?

そうして、エラーメッセージに出ていた通り、sudo certbot install --cert-name 〜 を実行。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Unable to read ssl_module file; not disabling session tickets.
Deploying certificate
Successfully deployed certificate for ドメイ.ン to /usr/local/etc/apache24/httpd-le-ssl.conf

Unable to read ssl_module file 〜 が気になるが (赤い字で表示される)、うまくいったように思える。

● 確認

https でウェブにアクセスできることを確認した。

また、Qualys SSL Labs の SSL Server Test というものを利用させてもらうと、https がどの程度問題なく設定されているか、テストしてもらうことが出来る。

Qualys SSL Labs
SSL Server Test (Powered by Qualys SSL Labs)

今回、「A」判定をもらえたので、まあ問題ないだろう。 (「A+」という判定結果もあったはずだがどう設定すればいけるのか..)

● conf

httpd.conf を見ると、VirtualHost 及びその後が、以下のように書き換わっていた。


<VirtualHost *:80>
	ServerAdmin 〜@〜〜.〜
	DocumentRoot /home/www/apache24/data
	ServerName ドメイ.ン
RewriteEngine on
RewriteCond %{SERVER_NAME} =ドメイ.ン
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Include /usr/local/etc/apache24/httpd-le-ssl.conf

certbot が VirtualHost の設定に追加するということは、やはり certbot は VirtualHost しか対応していないのかもしれない。

また、/usr/local/etc/apache24/httpd-le-ssl.conf というファイルが作成されていた。


<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerAdmin 〜@〜〜.〜
	DocumentRoot /home/www/apache24/data
	ServerName ドメイ.ン

SSLCertificateFile /usr/local/etc/letsencrypt/live/ドメイ.ン/fullchain.pem
SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/ドメイ.ン/privkey.pem
Include /usr/local/etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

このファイルがあるので、今まで extra/httpd-ssl.conf のファイルも設定していたのだが、それは触らなくてよくなったようだ。

また、これを見ても分かるように、Let's Encrypt 関連のファイルは /usr/local/etc/letsencrypt 以下に入ったようだ。
(他に /var/log/letsencrypt とかもある)

● renew

証明書の自動更新だが、certbot のページには変なことが書いてあるが、どうやら py39-certbot のパッケージ (py39-certbot-apache が依存) に、以下のファイルが含まれており、インストールされていたようだ。

/usr/local/etc/periodic/weekly/500.certbot-3.9

ただし、このままでは作動しない。

/etc/periodic.conf というファイルを作成し、weekly_certbot_enable="YES" を追加すればいけるようだ。
(/etc/periodic.conf が存在していなかったので新規作成)


# 2024-05-03 nsmrtks

# see /usr/local/etc/periodic/weekly/500.certbot-3.9
weekly_certbot_enable="YES"

# EoF

その後、weekly が発動するタイミングで来るメールから、作動していたことを確認した。

以上


index