Wir haben ein Problem mit der Erneuerung von Certbot SSL. Wir haben mehrere Websites unter /etc/nginx/sites-available/.
Wir haben diesen Location-Block für das Verzeichnis .well-known:
location ~ /\\.well-known {
auth_basic off;
root /etc/letsencrypt;
allow all;
}
und wir haben Erneuerungskonfigurationen für jede Website im Verzeichnis /etc/letsencrypt/renewal.
Dies ist ein Beispiel für eine davon.
#renew_before_expiry = 30 days
version = 2.7.4
archive_dir = /etc/letsencrypt/archive/redacted.com
cert = /etc/letsencrypt/live/redacted.com/cert.pem
privkey = /etc/letsencrypt/live/redacted.com/privkey.pem
chain = /etc/letsencrypt/live/redacted.com/chain.pem
fullchain = /etc/letsencrypt/live/redacted.com/fullchain.pem
#Options used in the renewal process
[renewalparams]
allow_subset_of_names = True
account = 670273d7a9a89f2d3494cf6e38739b1c
rsa_key_size = 4096
post_hook = /bin/systemctl reload nginx
authenticator = webroot
webroot_path = /etc/letsencrypt,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = rsa
[[webroot_map]]
redacted.com = /etc/letsencrypt
Unsere Certbot-Version ist 2.7.4, wir haben von 1.32.0 aktualisiert und es hat auch nicht funktioniert.
Wir wissen, dass unser Problem mit ip6tables zusammenhängt, aber wir haben bereits ACCEPT-Regeln für die Ports 443 und 80.
Wenn wir versuchen, auf ACME-Challenge-Dateien während certbot renew --dry-run zuzugreifen, können wir erfolgreich auf die Dateien zugreifen. Daher sollten Port 80 und 443 kein Problem sein.
Wenn wir den ip6tables INPUT-Filter von DROP auf ACCEPT ändern, können alle Websites erneuert werden, aber wenn wir den INPUT DROP-Filter verwenden, schlagen die meisten Websites bei der Erneuerung mit dieser Fehlermeldung fehl.
Certbot konnte einige Domains nicht authentifizieren (Authenticator: webroot). Die Zertifizierungsstelle meldete diese Probleme:
Domain: redacted.com
Typ: Verbindung
Detail: xxx.xxx.xxx.xxx: Timeout beim Verbindungsaufbau (wahrscheinlich Firewall-Problem) beim Abrufen von https://redacted.com/.well-known/acme-challenge/EIJFF3UFqtZJCZtG_Kv9Ca7BGA5LiuBdb9JIWxXIhVg
Wir haben bereits mit minimalen Regeln versucht und versucht, ACCEPT-Regeln für die Ports 80 und 443 zusätzlich zur Input-Kette hinzuzufügen, aber auch das hat nicht funktioniert. Wir stecken also fest.
Ein Beispiel für eine Nginx-Konfiguration finden Sie in den folgenden Zeilen.
server {
listen [::]:80;
server_name .redacted.com;
return 301 https://redacted.com$request_uri;
}
server {
listen [::]:443 ssl http2;
server_name redacted.com;
access_log /var/www/log/access/redacted.access.log main buffer=32k;
error_log /var/www/log/error/redacted.com.error.log notice;
limit_conn gulag 200;
root /var/www/web/redacted.com/web;
index index.php;
ssl_certificate /etc/letsencrypt/live/redacted.com/fullchain.pem;
ssl_trusted_certificate /etc/letsencrypt/live/redacted.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/redacted.com/privkey.pem;
include ssl_params;
## Standard site protection
include snippets/standard.conf;
location ~ /\\.well-known {
auth_basic off;
root /etc/letsencrypt;
allow all;
}
## Deny illegal Host headers
if ($host !~* ^(redacted.com|redacted.com)$ ) {
return 444;
break;
}
## Drupal configuration
include snippets/drupal7-php7.4.conf;
## php handling
include snippets/php7.4.conf;
}
Übrigens können wir während der Certbot-Erneuerung HTTP 200-Codes in den Nginx-Protokollen für ACME-Dateien sehen.