【解決】SELinux有効下でLet’s Encrypt証明書の自動更新がエラーとなる

Let’s Encrypt証明書をcronで自動更新させていたのだが、
毎回エラーとなっていた。

  • OSはCentOS 7.4
  • httpdはApache 2.4.6
  • SELinuxは有効
  • certbot renew を手動で実行すると正常に更新できる

エラーとなったレポートは以下の通り。

Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): <a href="http://acme-v01.api.letsencrypt.org/" target="_blank" rel="noopener noreferrer" data-saferedirecturl="https://www.google.com/url?hl=ja&amp;q=http://acme-v01.api.letsencrypt.org&amp;source=gmail&amp;ust=1513823431740000&amp;usg=AFQjCNEDWurBM4xjfsNLFNBKD6oVruufgQ">acme-v01.api.letsencrypt.org</a>
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for <a href="http://jmd.jp/" target="_blank" rel="noopener noreferrer" data-saferedirecturl="https://www.google.com/url?hl=ja&amp;q=http://jmd.jp&amp;source=gmail&amp;ust=1513823431741000&amp;usg=AFQjCNHaFxnQOOXWkzHONP8i1lGxnHRTIQ">jmd.jp</a>
tls-sni-01 challenge for <a href="http://www.jmd.jp/" target="_blank" rel="noopener noreferrer" data-saferedirecturl="https://www.google.com/url?hl=ja&amp;q=http://www.jmd.jp&amp;source=gmail&amp;ust=1513823431741000&amp;usg=AFQjCNEVQXmw0ubxHzYFTNE_ZyMYRoCOYA">www.jmd.jp</a>
Error while running apachectl graceful.

Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

Cleaning up challenges
Attempting to renew cert (<a href="http://jmd.jp/" target="_blank" rel="noopener noreferrer" data-saferedirecturl="https://www.google.com/url?hl=ja&amp;q=http://jmd.jp&amp;source=gmail&amp;ust=1513823431741000&amp;usg=AFQjCNHaFxnQOOXWkzHONP8i1lGxnHRTIQ">jmd.jp</a>) from /etc/letsencrypt/renewal/jmd.<wbr />jp.conf produced an unexpected error: Error while running apachectl graceful.

Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
. Skipping.

結論としてはcertbot renewをcronから実行する際にSELinuxが有効となっていることが原因らしい。

ブール値かなにかを調整しての対応が正しいと思うのだが、とりあえずcronで実行させるシェルスクリプトを以下のようにしてcertbot実行の前後でSELinuxを無効→有効としたら正常に自動更新できるようになった。

#!/bin/bash
setenforce 0
certbot renew
setenforce 1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です