Nous avons un problème avec le renouvellement SSL de certbot. Nous avons plusieurs sites sous /etc/nginx/sites-available/.
Nous avons ce bloc location pour le répertoire /.well-known :
location ~ /\\.well-known {
auth_basic off;
root /etc/letsencrypt;
allow all;
}
et nous avons des configurations de renouvellement pour chaque site sous le répertoire /etc/letsencrypt/renewal.
Voici un exemple pour l’un d’entre eux.
#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
Notre version de certbot est 2.7.4, nous sommes passés de 1.32.0 et cela n’a pas fonctionné non plus.
Nous savons que notre problème est lié à ip6tables, mais nous avons déjà des règles ACCEPT pour les ports 443 et 80.
Lorsque nous essayons d’accéder aux fichiers acme-challenge pendant certbot renew --dry-run, nous pouvons accéder aux fichiers avec succès. Donc, les ports 80 et 443 ne devraient pas être le problème.
Lorsque nous changeons le filtre ip6tables INPUT de DROP à ACCEPT, tous les sites peuvent se renouveler, mais lorsque nous utilisons le filtre INPUT DROP, la plupart des sites échouent au renouvellement avec cette erreur :
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
Domain: redacted.com
Type: connection
Detail: xxx.xxx.xxx.xxx: Fetching https://redacted.com/.well-known/acme-challenge/EIJFF3UFqtZJCZtG_Kv9Ca7BGA5LiuBdb9JIWxXIhVg: Timeout during connect (likely firewall problem)
Nous avons déjà essayé avec un ensemble minimum de règles et essayé d’ajouter des règles ACCEPT pour les ports 80 et 443 en plus de la chaîne input, mais cela n’a pas non plus fonctionné. Nous sommes donc bloqués ici.
Un exemple de configuration nginx peut être trouvé dans les lignes suivantes.
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;
}
Au fait, nous pouvons voir des codes HTTP 200 dans les journaux nginx pour les fichiers acme lors du renouvellement de certbot.