Let’s Encrypt SSL証明書の更新エラー対応
以前投稿した下記記事の証明書更新が突然失敗する様になってしまった
やっかいなのは リバースプロキシでLet’s Encrypt
通常のWebサイトでのLet’s Encrypt の設定情報は見つけやすいがリバースプロキシでの設定情報は少ない
証明書はリバースプロキシに設定する。リバースプロキシで証明書の更新は –webroot オプションを使用するといいらしい
--webroot
オプションを指定すると、DocumentRoot( /usr/share/nginx/html)配下に/.well-known/acme-challenge/
というディレクトリが作成され、そのディレクトリ配下のファイルをLet’s Encryptが参照できる事で検証成功・証明書が発行されるらしい。
今回は /usr/share/nginx/html/ssl-proof をmydomain.xxx
として公開し、Let’s Encryptが80ポートで(http://mydomain.xxx/.well-known/acme-challenge/
配下に)アクセス確認ができると証明書が発行されるらしい。
# /root/certbot/certbot-auto certonly --webroot -w /usr/share/nginx/html/ssl-proof -d mydomain.xxx
やったこと
参考サイト通り nginx側にプロキシ動作しないwebrootを作成
参考サイト通り 初めにWebRoot用のパスを作成します。
[root@nginxsv html]# pwd /usr/share/nginx/html [root@nginxsv html]# mkdir /usr/share/nginx/html/ssl-proof [root@nginxsv html]# chmod 755 ssl-proof
今までの /etc/nginx/conf.d/nextcloud.conf
server { server_name mydomain.xxx *.mydomain.xxx; location / { proxy_pass http://192.168.1.1/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection keep-alive; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/mydomain.xxx/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mydomain.xxx/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = mydomain.xxx) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name mydomain.xxx *.mydomain.xxx; return 404; # managed by Certbot }
新しい /etc/nginx/conf.d/nextcloud.conf
upstream backend { server 192.168.1.1:80; } server { listen 80; server_name mydomain.xxx; location ^~ /.well-known { root /usr/share/nginx/html/ssl-proof; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; # managed by Certbot server_name mydomain.xxx; ssl_certificate /etc/letsencrypt/live/mydomain.xxx/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mydomain.xxx/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { proxy_pass http://backend/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection keep-alive; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
今までの cron の内容
毎週土曜日早朝に下記のcronで証明書の強制更新をしていたがある日突然失敗しだした
30 4 * * 6 /root/certbot/certbot-auto renew --force-renew
新しい cron の内容
まだ、土曜日になってないので未検証ですが
30 4 * * 6 /root/certbot/certbot-auto certonly --webroot -w /usr/share/nginx/html/ssl-proof -d mydomain.xxx
お世話になったサイト
解りやすかった。感謝!
コメント