LoginSignup
0

More than 3 years have passed since last update.

CakePHP環境で「certbot renew」実行時のエラーが出たときの対処法

Last updated at Posted at 2020-03-08

環境について

  • Linux CentOS7
  • apache
  • PHP(CakePHP2)
  • Let's Encrypt

SSL証明書の更新でエラー

某WebサイトでLet's Encryptを使っています。
Let's Encryptは3か月ごとに更新をしなければならなく、証明書の期限が1か月前から更新することができます。

それを毎回手動でやるのは結構面倒なので、cronでバッチ処理をして自動でSSLの更新をかけていることにして、実行した場合はその結果をメールで返す仕組みにしています。

更新失敗のメールが届く

ある時メールに更新失敗の件名が…

Faild renew letsencript SSL cert

現状Webサイトは問題なかったのですが、これが更新期間を過ぎると、

信頼されていないサイトです

的な表示が出てしまうのですぐに対処します。

CentOSの中へ

とりあえず手動で実行してみます。

certbot renew --dry-run

以下の結果が…

Cahllenge failed for domain *****.jp
Challenge failed for domain www.*****.jp
Attempting to renew cert (www.*****.jp) from /etc/letsencrypt/renewal/www.*****.jp produced an unexpected error: Some challenges have failed.. Skipping.
All renewal attempts failed. The following certs could not be renewed:

※一部伏字

こんな感じでとにかく、失敗したよ的なことがずらずらと書かれているわけです。

注目すべきはさらにその下。

Domain: ******.jp
Type:   unauthorized
Detail: Invalid response from
https://******.jp/.well-known/acme-challenge/xZtOg19utX8Mch7n3hgYJNeNk4GM2PBw6LVqFgzs9pI
[153.***.***.***]: "<!DOCTYPE html>\n<html lang=\"ja\"
ng-app=\"NetCommonsApp\">\n<head>\n\t<meta
charset=\"utf-8\">\n\t<meta http-equiv=\"X-UA-Compatible\" conte"

ここにアクセスしたらうまくいかなかったよ~みたいなことが書かれています。

https://******.jp/.well-known/acme-challenge/xZtOg19utX8Mch7n3hgYJNeNk4GM2PBw6LVqFgzs9pI

↑自分のドメイン+「.well-known/acme-challenge」みたいなURLです。

どうやらここにSSL証明書が配置されているみたいですが、アクセスできないから失敗したとのことです。

正しくそのURLの先を導いてあげる

今回はapache+CakePHP2でWebサイトを構築しています。
ルートディレクトリは以下の感じです。
apache側も以下のパスを参照するように設定されています。

/var/www/html/cakephp

いったんルートディレクトリへ

cd /var/www/html/cakephp

ルートディレクトリなので、ここにアクセスするのが普通なのですが、
CakePHPではさらにここからリダイレクトしているわけですね。

それをやっているファイルが

.htaccess

になります。

中身はこんな感じです。

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

CakePHPの中のapp/webrootにさらにリダイレクトしてあげています。

ただ、webrootの中にwell-knownというディレクトリは存在しないので、
「https://*****.jp/well-known」というURLにアクセスがあった場合は、リダイレクトさせないようにします。

以下の文を追加

RewriteRule ^\.well-known(.*)$ .well-known$1 [L]

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^\.well-known(.*)$ .well-known$1 [L]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

これでwell-knownにアクセスした場合はリダイレクトされなくなります!

再度実行!

以下のコマンドを実行

certbot renew --dry-run

成功時のログを取っておくのを忘れてしまいました。。

failedという文字が出ていないこと、
succeedという文字が出ていること、

を確認できたら大丈夫だと思います。

成功したら「--dry-run」を外して再実行。

certbot renew 

無事、証明書が更新されました。

終わり。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0