Ca y est, j'ai réussi !
Ca tenait à un tout petit détail de rien du tout dans la config, mais c'était suffisant pour que les certificats restent en statique sans jamais être renouvelés, voir créés.
Du coup, j'en ai profité pour télécharger la dernière mise à jour pour Windows de ce
mod_md.
Apache 2.4.41 fonctionne avec la
2.0.10 (qui est une beta) alors qu'il est possible d'avoir la
2.1.9 déjà toute compilée avec
VS16 ou le
VC15 et la
2.2.0 arrive ces jours ci (c'est la version finale).
Ce module se télécharge ici :
https://github.com/nono303/mod_md/releasesIl suffit de télécharger le .zip de la dernière version, de décompresser et de copier/coller le module
mod_md.so, compilé avec le VC++ choisi, dans le dossier
modules de Apache en remplacement de l'ancien.
Ensuite, allons-y. Pour l'exemple, on demandera un certificat pour
example.com et deux sous domaines.
Tout à la fin de
HTTPD.CONF copier/coller ce qui suit :
<IfModule mod_status.c>
<Location "/server-status">
SetHandler server-status
Require local
</Location>
<IfModule mod_md.c>
<Location "/md-status">
SetHandler md-status
Require local
</Location>
</IfModule>
</IfModule>
<IfModule mod_md.c>
MDBaseServer off
MDCAChallenges http-01
MDCertificateAgreement accepted
MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
# MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory
MDCertificateProtocol ACME
MDCertificateStatus on
MDMustStaple on
MDPortMap http:80 https:443
MDPrivateKeys RSA 4096
MDRenewMode always
MDRenewWindow 30d
MDRequireHttps temporary
MDStoreDir "c:/ssl/md"
</IfModule>
Ensuite, au dessus de votre VHOST et comme VHOST, entrez ceci : (
Attention ! On ne donne plus de certificat/clé dans le VHOST, c'est Mod_MD qui se charge de tout !)
<MDomain example.com auto>
MDMember www.example.com
MDMember mail.example.com
MDCertificateFile "c:/ssl/md/domains/example.com/pubcert.pem"
MDCertificateKeyFile "c:/ssl/md/domains/example.com/privkey.pem"
</MDomain>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ServerAlias mail.example.com
ServerAdmin admin@example.com
DocumentRoot E:/wamp/www
SSLEngine on
# Ne spécifier aucun certificat ni clé à la suite, Mod_MD se charge de tout
</VirtualHost>
Bien entendu, il ne faudra pas oublier de créer un alias et une petite config pour les serveurs Lets Encrypt dans le dossier
Alias de Wamp, afin que Lets Encrypt puisse librement accéder au dossier
./.well-known/acme-challenge/ afin de valider les fichiers de vérification créés par
Mod_MD :
Alias /.well-known/acme-challenge "C:\ssl\md\challenges"
<directory "C:\ssl\md\challenges">
Options -Indexes
AllowOverride none
Require all granted
</Directory>
Et voilà, il ne reste plus qu'à laisser la magie opérer et lancer Apache !
Si le certificat n'existe pas, il sera créé.
Et voici la suite :
Puis, après redémarrage du serveur :
Dans
error.log, ce message sera présent à chaque création/renouvellement de certificat :
[Thu Oct 17 03:54:53.065600 2019] [md:notice] [pid 2020:tid 1252] AH10059: The Managed Domain example.com has been setup and changes will be activated on next (graceful) server restart.
ATTENTION AUX DOSSIERS CRÉÉS !Dans l'exemple, le chemin
C:\ssl est utilisé.
Les dossiers suivants sont ceux du module
MD, il n'est pas possible de les renommer !
Un autre lecteur et dossier peut-être utilisé, mais le dossier
.\md\challenges, par exemple, venant à la suite n'est pas négociable !
Donc, quand un chemin comme
C:\ssl\md est donné, seul ce qui vient avant
\md peut être modifié !
Le module
MD créera les dossiers et fichiers dont il a besoin dans le dossier
md :
md-+--
+- accounts
+- archive
+- challenges
+- domains
+- fallback-privkey.pem
+- fallback-cert.pem
+- httpd.json
+- md_store.json
+- staging
+- tmp
Il est possible d'exécuter un script dès que quelque chose se passe avec les certificats gérés, comme par exemple un script se chargeant de redémarrer le serveur.
Pour ça, la documentation est notre amie à tous !