web-dev-qa-db-ja.com

LetsEncrypt certbot複数の更新フック

LetsEncryptのcertbotからのSSL証明書の更新を自動化しています。実際の更新は機能していますが、更新された証明書をロードするために、サービスの再起動を自動化する必要があります。 --renew-hookのc​​ronjob内で複数のletsencrypt renewパラメーターを使用できるかどうか疑問に思っていました。

証明書の更新時にサービスの再起動を自動化する方法?

11
Atte Juvonen

はい、複数の--renew-hookステートメントを使用できます。 -qフラグも使用して、更新が実際に行われるまで空の通知をメールで送信するようにします。また、更新が発生するまでサービスを再起動しません。これにより、必要に応じてログファイルが電子メールに添付されます。

毎日bashを実行するcronがあります。

私のbash(certbotrenew.sh)の中には単純にこれがあります

#!/bin/bash
cd /opt/certbot
Sudo ./certbot-auto renew --renew-hook "service postfix reload" --renew-hook "service dovecot restart" --renew-hook "service Apache2 reload" -q >> /var/log/certbot-renew.log | mail -s "CERTBOT Renewals" [email protected]  < /var/log/certbot-renew.log
exit 0

私のcronは

00 20 * * 1 /bin/certbotrenew.sh

何も起こらなかったにもかかわらず、なぜ私がメールを送信するのかと疑問に思う人もいます。毎日のcronが実行されていることを常に知りたいのです。

13
MitchellK

CertBotのUbuntu 16.04での新規インストールから見たものから、cronジョブが作成されます。

# /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(3600))' && certbot -q renew --pre-hook 
'/bin/run-parts /etc/letsencrypt/pre-hook.d/' --post-hook '/bin/run-parts /etc/letsencrypt/post-hook.d/' --renew-hook '/bin/run-parts
/etc/letsencrypt/renew-hook.d/'

したがって、run-partsを含む多くのディレクトリで/etc/letsencrypt/renew-hook.d/を実行します

これらのフックディレクトリのいずれかに実行可能ファイルを追加するだけです(必要なファイルを選択します)。

例として、私のrenew-hook.dで、次の内容のファイルrestart-nginxを作成しました。

#!/bin/bash
/etc/init.d/nginx restart

注:run-partsオプションを使用すると、--testによって呼び出されるファイルを知ることができます。 (例run-parts --test /etc/letsencrypt/renew-hook.d/

8
JorgeeFG

ファイルのグローバルオプションとしてフック(および必要に応じて他のオプション)を設定することもできます/etc/letsencrypt/cli.iniドキュメントを参照 )このように:

# Global config for letsencrypt runs
#
# Note that these options apply automatically to all use of Certbot for
# obtaining or renewing certificates, so options specific to a single
# certificate on a system with several certificates should not be placed
# here.

renew-hook = service postfix reload
post-hook = service nginx reload

ほとんどのシステムで最初にファイルを作成する必要があります。 Letsencryptには付属していません。

グローバルに移行したくない場合は、renewalフォルダーごとに証明書固有のバージョンを作成することもできます。

5
lorem monkey

フックスクリプトを実行するための最新の推奨方法は、/etc/letsencrypt/cli.iniからです。ファイルが存在しない場合は、自分で作成できます。もう1つは、--deploy-hookの代わりに--renew-hookを使用する必要があるということです。 --renew-hookはまだ存在しますが、最新のドキュメントにも記載されていないため、段階的に廃止されます。

したがって、/etc/letsencrypt/cli.iniが存在しない場合は作成し、次の行を追加します。deploy-hook = "service postfix reload; service dovecot restart; service Apache2 reload"

それらの特定のサービスをリロードします。

1
zoxxx

Certbotの実行を制御する場所もあります(ubuntu 16.04 + nginx —以下の設定ファイル)

1)systemdタイマー

コマンドを実行:Sudo systemctl list-timers

出力を参照してください:

Sun 2018-07-08 00:46:59 EEST 7h left Sat 2018-07-07 12:36:26 EEST 4h 51min ago certbot.timer certbot.service

それから

2)

systemctlがCertbotを実行する時間を制御するファイルをチェックします

/etc/systemd/system/timers.target.wants/certbot.timer

これはのシンボリックリンクです

/lib/systemd/system/certbot.timer

時間+ランダムな秒を定義するこの行に注意してください(letsencryptサーバーにストレスを与えないためにランダムな時間を設定してください)

OnCalendar=--* 00,12:00:00

RandomizedDelaySec=3600
1
Ion Vladescu

それが新しいバージョンだけのためかどうかはわかりませんが、誰かがそれが役に立つと思うことを願っています。少なくとも1つのドメインを追加すると、certbotは3つのサブディレクトリ「deploy」、「post」、「pre」で「renewal-hooks」ディレクトリを作成します。

スクリプトを「post」フォルダーに入れると、更新後に自動的に実行されます。スクリプトに+ xを追加して、実行可能にすることを忘れないでください。

私は、次の内容の「001-restart-nginx.sh」を1つだけ使用しています。

#!/bin/bash
echo "ssl certs updated" && service nginx restart

/etc/letsencrypt/renewal-hooks/post/001-restart-nginx.sh

これにより、手動で--post-hookすべての特定の指示を持つパラメーター。

実際の更新プロセスでは、次のようなものが表示されます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/<your-domain-name>/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Running post-hook command: /etc/letsencrypt/renewal-hooks/post/001-restart-nginx.sh
Output from post-hook command 001-restart-nginx.sh:
ssl certs updated
0
Devtrix.net