ACME : migration Certbot vers MD d’Apache

Suite à mon premier test avec mod MD, je vais migrer la gestion de mes certificats de Certbot vers le module MD d’Apache.

Configuration générale

Mon fichier /etc/apache2/mods-available/md.conf contient :

MDCertificateAgreement accepted
LogLevel md:info
MDContactEmail letsencrypt@framboisier.net
MDCAChallenges tls-alpn-01
Protocols h2 http/1.1 acme-tls/1

Il a été activé en même temps que le module avec sudo a2enmod md.

Les modifications de configuration à faire pour chaque vhost

Pour mon certificat, j’ai deux lignes de configurations.

SSLCertificateKeyFile /etc/letsencrypt/live/abc.framboisier.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/abc.framboisier.com/fullchain.pem

Pour mon vhost abc.framboisier.com, je les encadre dans une section MDomain et remplace SSLCertxxx par MDCertxxx et j’ajoute une directive ‘MDRenewMode always’. Comme ceci (en fait j’ai mis les anciennes en commentaire) :

<MDomain abc.framboisier.com>
  /etc/letsencrypt/live/abc.framboisier.com/privkey.pem
     /etc/letsencrypt/live/abc.framboisier.com/fullchain.pem
MDCertificateKeyFile    /etc/letsencrypt/live/abc.framboisier.com/privkey.pem
MDCertificateFile       /etc/letsencrypt/live/abc.framboisier.com/fullchain.pem
MDRenewMode     always
</MDomain>

Après avoir changer tous les vshost, on redémarre Apache par sudo apachectl restart. Je jette un œil dans l’errorlog et voit :

The Managed Domain abc.framboisier.com has been setup and changes will be activated on next (graceful) server restart.

Je m’exécute et relance le service Apache.

Mise à jour de la crontab

Je mets à jour la crontab de root pour supprimer le lancement quotidien de certbot.

Attente du renouvellement

Là, on laisse reposer plusieurs jours voir semaines le temps pour que les certificats actuels soit renouvelés. La fenêtre de renouvellement est définit par la directive MDRenewWindow, par défaut fixée à 33% de la durée de validité. Les certificats LE actuels seront donc renouvelés à 1 mois de leur échéance. Les nouveaux certificats seront stockés dans /etc/apache/md/domains/<nom-site>. Je vérifie à l’échéance prévue.

Fin de migration

Le nouveau certificat n’est pas utilisé automatiquement. Les directives MDCertificatexxx forçant l’usage des ‘vieux’ certificats. Il faut alors supprimer entièrement la section créée précédemment (tout ce qui se trouve entre <MDomain abc.framboisier.com> et </MDomain> et ajouter avant le début de la section VirtualHost la ligne :

MDomain abc.framboisier.com

Puis redémarrer le service Apache – Ce qui provoque un autre renouvellement de certificat et je n’ai pas compris pourquoi.

Enfin, je fais le ménage dans les vieux certificats.

Pour aller plus vite

Dans la configuration du VirtualHost, on supprime les deux lignes SSLCertificatexxx et on ajoute avant le début de la section VirtualHost la directive MDomain <mon-site>, puis on redémarrage Apache deux fois. Le petit soucis est que l’on se retrouve avec un certificat auto-signé le temps d’obtenir un nouveau certificat auprès de LE (< 1 min si tout se passe bien). A vous de voir si cela vous gêne.

Avantages de TLS-ALPN-01

Je préfère TLS-ALPN-01 aux deux autres défis.

  • DNS-01 nécessite de donner accès en modification à la zone DNS depuis le serveur web. Outre le développement nécessaire pour effectuer ces écritures, ceci dégrade la sécurité. Un tiers malveillant prenant contrôle d’un des serveurs web du domaine, prend contrôle du DNS.
  • HTTP-01 peut poser problème si une redirection http vers https est positionnée. Soit l’AC suit les redirections (cas de LE), mais ce n’est pas spécifié dans le RFC, soit il faut poser des exceptions sur la redirection.
  • TLS-ALPN-01 ne nécessite aucune configuration, aucun développement. On peut même ne pas donner accès en http au serveur. Bref c’est d’la balle.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *