このサイトをリリースする際にCentOS7 のサーバーをChefを利用してセットアップ後、CertbotでSSLを導入した際に発生したエラーと、その対象方法をお話しようと思います。
いつも通りにCertbotでコマンドを叩くもエラーで止まる
サーバーのセットアップには、よくChefを使用するのですが、今回は、CentOS7のサーバーをChefで構築した後に、CertbotでSSL証明書をインストール使用とした際に以下の様なエラーに遭遇。
遭遇したエラーメッセージ
File: /etc/httpd/conf.d/le_http_01_challenge_pre.conf - Could not be found to be deleted
- Certbot probably shut down unexpectedly
File: /etc/httpd/conf.d/le_http_01_challenge_post.conf - Could not be found to be deleted
- Certbot probably shut down unexpectedly
Certbotに関しては、よく使用していますが、上記の様なエラーが発生したのは初めてだったので、しばらくgoogleなどで解決策がないか検索もしてみましたが、 決めてとなるような解決策は、見つかりませんでした。
Certbotのエラーへの対処方法
おそらくApacheのCookbookのバージョンか、Certbotのバージョンかの違いで発生しているとは思っていましたが、どちらかの原因を突き止めて修正している時間もなかったので、エラーメッセージが「削除されるべき le_http_01_challenge_pre.conf が見つかりません、削除されるべき le_http_01_challenge_post.conf が見つかりません」という内容だったので、
削除したいけど見つからないというならば、作ってあげれば良いんじゃない?
ということで、それぞれ、/etc/httpd/conf.d/le_http_01_challenge_pre.conf
と /etc/httpd/conf.d/le_http_01_challenge_post.conf
の空ファイルを作成後、再度Certbotのコマンドを実行したら問題なくSSL証明書をインストールすることができました。
更新時にも同様のエラーが発生
ただ、インストール時のみにでたエラーかと思ったのですが、更新時にも発生して止まるという現象が起きたので、自動更新用のcronを以下のようにしたところ問題なく更新もできるようになりました。
crontab設定内容
0 0,12 * * * root mkdir -p /etc/httpd/conf.d && touch /etc/httpd/conf.d/le_http_01_challenge_post.conf && touch /etc/httpd/conf.d/le_http_01_challenge_pre.conf && certbot renew > /dev/null
CertbotのSSL設定ファイルの書き出し場所が変わってChefを実行するたびにサイトがSSLで表示されなくなる
ちなみにCertbotのバージョンが新しくなったせいか、以前まで、/etc/httpd/sites-enabled
内に作成されていたSSLの設定ファイル ****-le-ssl.conf
が /etc/httpd/sites-available
内に作成され、それを /etc/httpd/conf/httpd.conf
を編集してINCLUDEさせる仕様になっていました。
通常であれば、これで問題ないのかもしれませんが、VirtualHostの追加もChefで行っており、VirtualHostを追加するたびにSSLの設定がおかしくなる現象が発生。そこで、Certbotが作成する設定ファイルの書き出し先を指定することによって回避することができました。
以下の内容を /etc/letsencrypt/cli.ini
を作成することで、SSLの設定ファイルが /etc/httpd/sites-enabled
に作成されるようになり、Chefの実行も問題なく行えるようになりました。
apache-vhost-root = /etc/httpd/sites-enabled
ChefとCertbotを使用している方で、いつしかSSL証明書がおかしくなったという方は、これで解消するかもしれません。