Let’s encrypt Partout et même sur Windows

J’avais déjà écrit un billet sur cette solution sans être super satisfait de la chose. Pourquoi :
1° ça ne tournait pas sous nunux mais sous windows sans utiliser la solution native let’s ecrrypt
2° impossible de demander le renouvellement du certificat … un bug …euh ouais mais c’est le principe de la solution que d’avoir du renouvellement automatisé ?

Du coup, grand ménage et on repart sur des bases bien meilleures.
J’ai créé un Ubuntu sous VMware avec tout ce qu’il faut pour générer mes certificats en utilisant ACME :

apt-get install git
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh –install

un petit coup d’auto-upgrade:
./acme.sh --upgrade --auto-upgrade

Puis après j’ai utilisé les API OVH pour valider mon nom de domaine via DNS sur let’s encrypt (et franchement c’est top ce qui me fait dire que pour les noms de domaine … OVH est plus qu’utile entre les API et le ghostdns).
Il faut aller sur cette adresse https://eu.api.ovh.com/createApp/ ce qui vous permet de récupérer une application key et une application secrète.
Après cette commande :

acme.sh --issue -d mydomain.com --dns dns_ovh

Comme c’est la première fois, il faut utiliser les 2 clés pour s’authentifier aupres d’ovh et c’est bon :
https://eu.api.ovh.com/auth/?credentialToken=n0Qbjm6wBdBr2KiSqIuYSEnixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Il faut sélectionner illimité et accès autorisé.
et on recommence :
acme.sh --issue -d mydomain.com --dns dns_ovh

Je génère mon certificat :
./acme.sh --issue -d toto.com -d autodiscover.toto.com -d adfs.toto.com –d mail.toto.com --dns dns_ovh

J’ai aussi besoin d’un pfx et merci openssl
./acme.sh --issue -d cd /root/.acme.sh/sdskh.com && openssl pkcs12 -export -out toto.com.pfx -inkey toto.com.key -in toto.com.cer -name "le1.toto.com" -passout pass: passquetuveux

Boum certificat généré !!!!
Avec tous les fichiers qu’il faut pour Windows et Linux

Maintenant, un coup de fstab pour monter un répertoire commun (genre un répertoire du NAS) et copie de tous les fichiers vers ce répertoire (qui est donc celui d’un NAS).

Pour intégrer les certifs sous nginx ou apache (parce que j’ai pas mal de machine qui utilisent l’un ou l’autre), ce n’est pas très compliqué.
Un coup de fstab qui va taper sur le répertoire commun plus haut.
Vous donnez comme chemin SSL pour apache ou nginx les bon fichiers du commun et a minuit tous les jours on redémarre apache et/ou nginx.
Les fichiers mis à jour sont automatiquement et sans autre manipulation pris en compte.

Ce qui est pratique c’est que les fichiers certificats sont copiés tous les jours et prise en compte tous les jours. Dès qu’il y aura une vrai mise à jour des certificats (vers le 2eme mois dans mon cas en utilisant acme –force) Nginx et Apache en tiendront compte rapidement (pendant moins de 15min tous les 2 mois, il y aura un certificat valide mais obsolète sans être révoqué un nouveau certificat valide non pris en compte).
Par contre dans l’univers Windows, ça se corse.
J’opère une copie vers un répertoire spécifique d’Exchange pour faire une manip d’intégration.
D’abord je détruis l’ancien certificat :

certutil -delstore My toto.com

Ensuite j’importe le nouveau certificat :
certutil -f -p "" -importpfx toto.com.pfx

Enfin un coup de powershell pour stocker dans une variable le « thumbprint » (c’est-à-dire l’identifiant unique du certificat) et puis de l’activer sous exchange pour smpt,iis,pop et imap :
$Thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "toto.com"}).Thumbprint;
Enable-ExchangeCertificate -Thumbprint $Thumbprint -Services POP,IMAP,SMTP,IIS –force

Boum, j’ai donc une copie régulière du bon certificat en provenance de mon Ubuntu (via un support commun type NAS et en même temps cela pourrait être un montage direct fstab).
Je récupère le thumbprint (qui change à la mise à jour du certificat) et je le force sous Exchange.

Cette solution ne fonctionne pas tout à fait de la même manière pour web application proxy et ADFS. Tout simplement mon certificat ADFS contient toto.com et mon certificat let’s encrypt aussi du coup j’ai un peu galéré pour cette ligne powershell :

$Thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {($_.Subject -match "toto.com") -and ($_.Subject -notmatch "adfs.toto.com")}).Thumbprint;

En gros je veux le thumbprint de toto.com mais pas adfs.toto.com et avec cette ligne powershell je la récupère.
Une fois récupéré j’injecte sous Web Application Proxy là encore en powershell :
Get-WebApplicationProxyApplication -Name autodiscover.toto.com | Set-WebApplicationProxyApplication -ExternalCertificateThumbprint $Thumbprint
Get-WebApplicationProxyApplication -Name mail.toto.com | Set-WebApplicationProxyApplication -ExternalCertificateThumbprint $Thumbprint

et ainsi de suite (peut etre qu’il y a un moyen d’imposer le certificat toto.com à toutes les entrée WAP mais je n’ai pas trouvé).

La solution fonctionne aussi sur le mêle principe pour le certificat pour le vpn sstp
Grosse astuce … je stock encore en variable le thumbprint

$Thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {($_.Subject -match "sdskh.com") -and ($_.Subject -notmatch "adfs.sdskh.com")}).Thumbprint;

J’affecte le certificate via son thumbprint au remote access

netsh ras set sstp-ssl-cert hash=$Thumbprint

Et pour que ca fonctionne je le redémarre !

net stop RemoteAccess
net start RemoteAccess

Le tout dans un script powershell.
Maintenant il faut que tous ces scripts soit programmé. Rien de plus simple un petit .bat à créer pour Exchange, pour le WAP et pour le VPN qui invoque le script powershell :

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command ". "C:\chemindemonscript\monscript.ps1"

 

Une fois que tout cela est fini, j’ai :
Ubuntu génère/renouvelle les certificats let’s encryt
Copie vers un répertoire commun

le Serveur Exchange fait une copie du commun vers un répertoire ad hoc. Importation dans la librairie des certificats avec certutil. Powershell permet de récupérer le thumb du bon certificat. Il est force en affectation POP,IMAP,SMTP,IIS.

Le serveur WAP fait une copie du commun vers un répertoire ad hoc. Importation dans la librairie des certificats avec certutil. Powershell permet de récupérer le thumb du bon certificat. Il est force en affectation de toutes les adresses du reverse proxy.

Le serveur WAP fait une copie du commun vers un répertoire ad hoc. Importation dans la librairie des certificats avec certutil. Powershell permet de récupérer le thumb du bon certificat. Il est force en affectation du vpn sstp. Redémarrage du service VPN.

 

Tout étant programmé. Terminé je ne fais plus rien et j’ai toujours le bon certicat let’s encrypt sous linux ou Windows.
Elle est pas belle la vie ?

Virtualisation OpenVZ (principe)

Enfin un petit billet (oui ça faisait longtemps)

 

Il y a peu j’ai changé l’hébergement des blogs.
Nous étions sur un dédié OVH (vieil Atom avec 2 giga de RAM et un disque dur « magnétique » poussif). Le tout assez cher donc et complétement obsolète.

J’ai testé le VPS OVH … prix bien plus raisonnable et à ma grande surprise sympathiquement plus véloce que l’ancien dédié.

Une fois les migrations de blog faite (et quand vous n’avez plus accès à la database … s’pas facile), je me suis penché sur le « mais comment ça fonctionne-t-il donc cet hébergement VPS chez OVH ».

 

Sans surprise OVH propose du VMWARE ESXI. De la bonne virtualisation en  « elastic cloud ». C’est-à-dire que les machines sont dans une sorte de cloud virtuel et qu’en ajoutant une machine, elle s’autoconfigure pour amener de la RAM et du CPU au cloud. Je présume que tout est stocké dans des bais fibrées (mais bon cette partie-là ne nous intéresse pas).

Et une autre forme de virtualisation bien sympathique : OpenVZ (conteneur Linux)

En quoi cela consiste-t-il ?

Vous installez (dans mon cas) un Cent OS et après plein de ligne de commande (que je vous donnerais après) vous avez installé une sorte de cloneur – containeur Linux.
Il suffit de créer une machine virtuelle au-dessus du Cent OS. La création est rapide puisqu’elle repose sur les fichiers du Cent OS qui sont « virtualisés ».
Cette virtualisation est bien plus limité que celle de VMware (que du Linux et pas toutes les versions) mais elle permet de  compartimenter des installations de Linux.
Dans mon cas :
une petite machine virtuelle avec ESXI, j’ai installé Cent OS dessus. Puis installation dans la VM d’OpenVZ.
Sur cette machine en virtualisation « noyaux », j’ai 4 Ubuntu : 1 MySQL et 3 AP (apache PHP).

Cela m’a permis de séparer 1 « machine » MySQL, 1 « machine » WordPress, 1 « machine » apache et plein de chose dedans et enfin un dernière « machine » WordPress.
Tout est bien séparer. Je peux rebooter un site sans toucher l’autre.
L’énorme avantage, c’est lorsque je fais une mise à jour du Cent OS … la plupart des machines virtualisées qui sont au-dessus sont elles aussi mise à jour.