letsencrypt.org est un service qui fournit depuis peu des certificats HTTPS de niveau SSL DV, c’est-à-dire qu’il valide votre domaine et permet d’obtenir le petit cadenas sécurisé dans votre navigateur préféré.
Ce service est en bêta depuis fin 2015, il fournit un certificat pour le moment valable 3 mois, qu’il faut donc renouveler régulièrement.
Le How To du site officiel fournit la méthode de génération depuis une machine Unix/Linux.
Voici la méthode pour générer ce certificat depuis Windows, dans une seconde partie nous verrons comment valider plusieurs domaines et sous-domaine (typiquement ajouter son www.)
Générer un certificat HTTPS Letsencrypt depuis Windows
Il vous faut pour cela Visual Studio (j’utilise la version 2015) et d’aller sur letsencrypt-win-simple et télécharger le master master.zip
Ce zip contient une solution et son projet VisualStudio qui vous permet d’avoir accès à une ligne de commande vous permettant de générer votre certificat.
Il fait donc office de client d’accès au service de Letsencrypt.
Important: VisualStudio doit être lancé en mode Administrateur pour que ce projet fonctionne.
Il s’utilise de la façon suivante:
vous choisissez la manière dont il doit déposer le fichier challenge sur votre serveur (FTP, Local, WebDav, San…), dans la racine du serveur il doit vous créer .well-knownacme-challenge
Puis le service va consommer ce fameux challenge, afin de vous générer un certificat pour chacun de vos domaines dans C:Users{Name}AppDataRoamingletsencrypt-win-simplehttpsacme-v01.api.letsencrypt.org
ça-*-crt.pem
domain.com-all.pfx
domain.com-crt.der
domain.com-crt.pem // Votre Certificat
domain.com-gen-csr.json
domain.com-gen-key.json
domain.com-key.pem // Votre Clé privée
ca-*-crt.der // Le Certificat délivré par l'Autorité de Certification / Certificate Authority de Let's Encrypt
Astuce
Si vous souhaitez générer votre challenge en local sur votre machine, puis le déposer sur votre serveur à distance.
Il suffit de mettre un breakpoint à la ligne 1022 de Progam.cs juste après la ligne target.Plugin.CreateAuthorizationFile(answerPath, httpChallenge.FileContent);
Ainsi cela vous laissera le temps de copier le fichier challenge sur votre répertoire serveur.
Cas d’utilisation pour générer un certificat Multidomaines
Afin de valider domain.com et www.domain.com, il faut mettre dans les propriétés de votre projet au niveau de la ligne d’argument --accepttos --san
accepttos: permet automatiquement d’accepter les conditions générales du service.
san: permets de générer plusieurs domaines alternatifs pour un meme certificat (par exemple blog.domain.com ou www.domain.com)
Lorsque vous lancez la console:
Tapez M pour rentrer en utilisation manuelle si vous n’êtes pas sur le serveur
Le prompt vous demande alors Enter a hostname: (exemple: domain.com)
Le prompt vous demande alors Enter all Alertnative names seperated by a comma : (exemple: domain.com,www.domain.com)
Les challenges seront alors générés pour chacun des sous-domaines (utilisez l’astuce du breakpoint pour copier le challenge si besoin)
Votre certificat est généré dans C:Users{Name}AppDataRoamingletsencrypt-win-simplehttpsacme-v01.api.letsencrypt.org
Le prompt vous demande si vous souhaitez lancer cette opération de façon régulière en tache planifiée (vous pouvez dire non)
Vous pouvez désormais utiliser votre certificat sur votre serveur (au minimum domain.com-key.pem + domain.com-crt.pem + ca-*-crt.der)
Astuce
Sous Apache pour forcer et obliger la redirection de tout votre traffic sur www et https, modifiez votre .htaccess:
# BEGIN MyConfiguration
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
<IfModule mod_headers.c>
Header always set X-FRAME-OPTIONS "DENY"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
</IfModule>
# END MyConfiguration
Important: Il faut noter que la redirection / rewriting HTTPS peut poser des problèmes dans le cas ou votre certificat n’est pas valide pour tous vos domaines redirigés. Il vous faut inclure les 2 DNS dans votre certificat pour que la redirection https://domain.com vers https://www.domain.com se déroule correctement. Pour plus d’info sur ce sujet The certificate is read as part of the SSL handshake, and this happens before the request is even sent to the server
Bonjour Jérémie,
Un grand merci pour ces informations, qui m’ont grandement aidé pour la génération de mes certificats Let’s Encrypt !
Merci en particulier pour l’astuce du breakpoint, que j’ai dû utiliser également. Si je ne me trompe pas, c’est nécessaire uniquement pour la première génération par nom de domaine, mais plus pour les renouvellements (qui utilisent le même challenge ACME), correct ?
Enfin, j’ai dû créer manuellement les dossiers .well-known/acme-challenge et y ajouter un .htaccess pour ne pas avoir d’erreur 503 due au .htaccess de Drupal : https://community.letsencrypt.org/t/drupals-defualt-htaccess-file-breaks-webroot-authentication/3014
Peut-être que ces infos aideront d’autres personnes 😉
Merci encore pour ce tutoriel très détaillé,
Cyril
A noter, il y a un produit en phase alpha mais néanmoins fonctionnel, qui propose une interface utilisateur pour utiliser Let’s Encrypt avec un serveur IIS :
https://certify.webprofusion.com/home/