Hallo,
für meinen Server habe ich mir mithilfe von Certbot ein SSL Zertifikat eingerichtet. Laufzeit 3 Monate, und Certbot installiert scheinbar aber auch einen Timer für die automatische Erneuerung:
sudo apt install certbot ... Created symlink /etc/systemd/system/timers.target.wants/certbot.timer → /lib/systemd/system/certbot.timer.
In den Logs unter /var/log/letsencrypt gibt es auch Beweise dafür, dass das System regelmäßig die Erneuerung timergesteuert versucht:
2021-07-18 22:52:09,821:DEBUG:certbot.log:Root logging level set at 30 2021-07-18 22:52:09,822:INFO:certbot.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log 2021-07-18 22:52:09,855:DEBUG:certbot.plugins.selection:Requested authenticator <certbot.cli._Default object at 0xffffa2cced90> and installer <certbot.cli._Default object at 0xffffa2cced90> 2021-07-18 22:52:09,885:INFO:certbot.renewal:Cert not yet due for renewal 2021-07-18 22:52:09,887:DEBUG:certbot.plugins.selection:Requested authenticator standalone and installer None 2021-07-18 22:52:09,887:DEBUG:certbot.renewal:no renewal failures
Also er tut was, nur momentan nicht wirklich weil das Zertifikat noch lang genug läuft. Ich habe aber schon mal geforscht, und einen dry-run versucht (AUSZUG):
sudo certbot renew --dry-run Attempting to renew cert (MY-DOMAIN) from /etc/letsencrypt/renewal/MY-DOMAIN.conf produced an unexpected error: Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping. All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/MY-DOMAIN/fullchain.pem (failure)
Er kann sich also nicht an Port 80 binden. Port 80 wird von nginx bei mir benutzt, aber ich erzwinge halt https:
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; ## # Redirect HTTP to HTTPS ## server { listen 80 ; listen [::]:80; server_name MY-DOMAIN www.MY-DOMAIN; # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. return 301 https://$host$request_uri; } #server ## # HTTPS ## server { listen 443 ssl; listen [::]:443 ssl; server_name MY-DOMAIN www.MY-DOMAIN; ssl_certificate "/etc/letsencrypt/live/MY-DOMAIN/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/MY-DOMAIN/privkey.pem"; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload' always; client_max_body_size 50M; ## # Proxy all Requests to Foundry VTT ## location / { # Set proxy headers proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # These are important to support WebSockets proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # Make sure to set your Foundry VTT port number proxy_pass http://localhost:10443; } #location ## # Certbot ACME ## location ~ /.well-known { allow all; } #location } #server } #http
Die offensichtliche Lösung ist und funktioniert auch: nginx stoppen, certbot renew --dry-run ausführen = OK, funktioniert.
Nun suche ich entweder eine Lösung,
wie ich dem oben erwähnten Timer certbot.timer beibringe, vorher nginx zu stoppen und anschließend wieder zu starten (systemd Service Unit?)
oder wie ich das ganze bei laufendem nginx erledigen kann (nginx ist evtl. falsch konfiguriert?).
Hat jemand ne Idee?