Certbotは、Apache2が新しく生成された証明書を読み取ることを強制しません。

Certbotは、Apache2が新しく生成された証明書を読み取ることを強制しません。

システム: GNU/Linux Debian 9.5 ヘッドレス。

状況と問題

私はSSL証明書を再生成するためにLet's Encrypt Certbotをキャッチしましたが、Apache2を再ロードしませんでした。これにより、ドメインが半日間機能しなくなりました。私はこれを自動化したい。私たちはそれについて何ができますか?

これは私の現在のCertbot CRONファイルです/etc/cron.d/certbot

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

ベストアンサー1

私は通常、さまざまな理由でサービスを再開する目的でサービスを再起動するのを避ける傾向があります。したがって、Apacheを再起動することをお勧めします。証明書の更新後

certbotの場合、証明書の更新時にapache2を再起動してcrontabに入れることができるようです。

certbot renew --renew-hook "apachectl -k graceful"

新しい証明書を受け取った日付を見つけてApacheを再起動することもできます。

トピックを紹介するには、X.509証明書の有効開始日を確認することができます。

$ openssl x509 -startdate -noout -in ZscalerChain.crt 
notBefore=Jan  6 22:36:34 2015 GMT

またはエポック時間:

$ date --date $(openssl x509 -startdate -noout -in ZscalerChain.crt | awk -F"=" ' { print $2 } ') +%s
1420583794

または、だましてファイルの日付を確認することもできます。だから、次のようになります。

FILE=~/tmp/savedate
CERT=~/yourcert.crt

if [ ! -f $FILE ]
then
    touch --date="last year" $FILE
fi
DATE1=$(date -r $FILE +%s)
DATE2=$(date -r $CERT +%s)

if [ $DATE2 > $DATE1 ]
then
    touch $FILE
    sudo apachectl -k graceful
fi

または、X.509証明書の開始日を確認してください。

FILE=~/tmp/savedate
CERT=~/yourcert.crt

if [ ! -f $FILE ]
then
    touch --date="last year" $FILE
fi
DATE1=$(date -r $FILE +%s)
DATE2=$(date --date $(openssl x509 -startdate -noout -in $CERT | awk -F"=" ' { print $2 } ') +%s)

if [ $DATE2 > $DATE1 ]
then 
    touch $FILE
    sudo apachectl -k graceful
fi

これを行う他の方法があります。たとえば、証明書を更新した直後にApacheを再起動する必要がある場合は、代わりにinotifyファイルの変更を監視してそれに応じてアクションを実行できます。

おすすめ記事