CentOS6内にあるLet’s encryptのSSL証明書を自動更新する方法

CentOS6内にあるLet's encryptの証明書を自動更新する。

環境

  • CentOS release 6.9 (Final)

[alert title=”注意”]CentOSのバージョンが7以上の場合はコマンドが異なりますのでご注意ください。[/alert]

crondが起動しているか確認する

cron を使用するためには、crond が起動していなくてはいけません。
以下のコマンドを実行すれば確認できます。

[root@******** ~]# service crond status

以下の表示が出ればOKです。

crond (pid  *****) を実行中...

etc/cron.d以下にcronコマンド用ファイルを作成する

一行ずつ以下のコマンドを実行します。ファイル名はletsencrypt_updateとして作成しますが適宜自由に変えて構いません。

# cd /etc/cron.d/
# sudo touch letsencrypt_update

cronコマンドを記述する

[memo title=”MEMO1″]コマンドを実行する際はパスに気を付ける必要があります。
フルパスで指定するか、または実行ファイルがあるディレクトリまで最初にcdコマンドで移動した後に、
相対パスでそのディレクトリを指定する必要があります。

以下サンプル

00 * * * * cd /home/foo/public_html; ./foo.sh

[/memo]

[memo title=”MEMO2″]
crontabでスケジュール指定する場合はユーザー指定をしなくても問題ありませんが、
今回のように「cron.d/」以下で実行する場合は、cronコマンドの中に「どのユーザーで実行するか」を指定しなければいけません。
サンプル

00 * * * * root cd /home/foo/public_html; ./foo.sh

[/memo]

let’s encryptの証明書を更新するコマンドと組み合わせる

以下は、毎週金曜日の21時49分にlet’s encryptを更新するコマンドの記載例です。

/etc/cron.d/letsencrypt_update
49 21 * * 5 root /etc/letsencrypt/certbot/certbot-auto renew -n --pre-hook "sudo service httpd stop" --post-hook "sudo service httpd start"

それでは、部分的に見ていきましょう。

49 21 * * 5

は、日時を指定する部分になります。「分 時 日 月 曜日」と見ます。月日分時はそのままですが、曜日は0~7で指定します。

root

の部分は、実行するユーザーを指定する箇所です。今回はrootユーザーで実行します。

/etc/letsencrypt/certbot/certbot-auto renew

が、今回のメインの部分になります。
rootパスからのフルパスでcertbot-autoを指定します。certbotをインストールする場所はおそらくひとそれぞれ異なると思いますので、このパスの部分はご自身で確認してください。
そして、renewは、すべての証明書を更新するコマンドです。

-n

という部分はオプションです。

-n, --non-interactive, --noninteractive

のいずれも同じです。「run without asking for user input」という意味であり、入力が必要な場合もスキップして実行してくれます。

--pre-hook "sudo service httpd stop" --post-hook "sudo service httpd start"

–pre-hookは、renewを実行する前に実行するコマンドです。let’s encryptの証明書更新する場合にはapacheがstopしている必要があるため、renew実行前に”sudo service httpd stop”を実行しています。
また、–post-hookオプションで指定したコマンドは、renew後に実行されます。ただし、renewは期限が迫らないうちは、実行がスキップされ、その場合はpost-hookも実行されません。
[alert title=”注意”]sudo を付けてroot権限で実行すること[/alert]

参考サイト

http://qiita.com/katsukii/items/d5f90a6e4592d1414f99
https://www.cresco.co.jp/blog/entry/1488/
https://w0s.jp/diary/501
http://x68000.q-e-d.net/~68user/unix/pickup?crontab#prgmemo-crontab-option
http://qiita.com/tkykmw/items/9b6ba55bb2a6a5d90963
http://qiita.com/calcabrina/items/6b6f24bb6169edf209c2
http://itkobo-z.jp/archives/3285
http://d.hatena.ne.jp/ozuma/20120711/1342014448