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é.letsencrypt windows

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

1
ça-*-crt.pem
1
domain.com-all.pfx
1
domain.com-crt.der
1
domain.com-crt.pem // Votre Certificat
1
domain.com-gen-csr.json
1
domain.com-gen-key.json
1
domain.com-key.pem // Votre Clé privée
1
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

1
--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 

1
C:\Users\{Name}\AppData\Roaming\letsencrypt-win-simple\httpsacme-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:

1
# BEGIN MyConfiguration
1
<IfModule mod_rewrite.c>
1
RewriteEngine On
1
RewriteBase /
1
RewriteCond %{HTTPS} off
1
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1
RewriteCond %{HTTP_HOST} !^www.
1
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1
</IfModule>
1
<IfModule mod_headers.c>
1
Header always set X-FRAME-OPTIONS "DENY"
1
Header always set X-XSS-Protection "1; mode=block"
1
Header always set X-Content-Type-Options "nosniff"
1
</IfModule>
1
# 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