2018-11-15

Certification SSL d’un site web Azure, via Let’s Encrypt

De plus en plus de sites sont accessibles en https (SSL) et les navigateurs récents préconisent les accès aux sites web en utilisant ce protocole.

Depuis quelques temps, les autorités certifiantes (CA) réduisent de plus en plus leurs prix et certains proposent même de certifier votre certificat gratuitement. C’est le cas de Let’s Encrypt qui vous valide votre certificat gratuitement mais pour une durée maximale de 90 jours. D’autres autorités comme Gandi vous propose des certificats annuels, à bas prix (14,52 € par an).

Pour Let’s Encrypt, la procédure détaillée est sur https://zerossl.com/usage.html.

Outils

Pour créer et valider des certificats, il est nécessaire d’utiliser deux outils :

  • OpenSSL permet de générer et manipuler des certificats SSL. Depuis quelques temps, OpenSSL ne fournit que le code source mais vous pouvez télécharger un exécutable depuis le site SLProWeb. Après l’avoir installé sur votre PC, ajouté le dossier d’installation dans la variable d’environnement PATH de Windows pour simplifier les accès aux commandes.
    Dans Azure, OpenSSL est déjà installé.
  • ZeroSSL transmet votre certificat à Let’s Encrypt pour le valider.
    Dans Azure, transférez ce programme EXE dans le dossier « .well-known » de votre site web (nous utiliserons ce même dossier plus tard). Utilisez un client FTP ou le App Service Editor accessible depuis la rubrique Development Tools d’Azure.

Procédure

Les étapes pour créer un certificat SSL et pour le valider auprès de l’autorité certifiante Let’s Encrypt sont :

1. Créer une clé privée, qui servira à l’encryption de vos données.

openssl genrsa -out mydomain.key 2048

2. Créer une clé d’identification du compte Let’s Encrypt, pour simplifier la mise à jour ultérieure du certificat.

openssl genrsa -out account.key 4096

3. Créer une demande de certification (Certificate Request) pour un site web.

Envoyer cette demande à une autorité certifiante (CA) qui se chargera de vérifier que vous êtres bien le propriétaire du site web renseigné. Let’s Encrypt vérifie la présence d’un fichier (sans extension) dans le sous-site http://mydomain.com/.well-known/acme-challenge.

Par défaut, Azure ne reconnait pas les fichiers sans extension ; Il est donc nécessaire de modifier le Web.Config et d’ajouter la balise staticContent/mimeMap.

La commande suivante utilise la clé du compte (account.key), la clé privée (mydomain.key) et la demande de certificat (CSR) et génère le certificat validé (CRT). Avec le paramètre –live, cette commande enregistre un fichier dans le dossier D:\home\… qui est vérifié via l’URL du domaine à vérifier.

le.exe --key account.key --csr mydomain.csr --csr-key mydomain.key --crt mydomain.crt --domains "www.dvoituron.com,dvoituron.com" --path D:\home\site\wwwroot\.well-known\acme-challenge\ --generate-missing --unlink --live

L’argument –domains est très important et précise les noms de domaines validés par le certificat.
L’argument –path doit être adapté en fonction de l’emplacement où est hébergé votre site web.

4. Convertir la clé privée (KEY) et le certificat validé (CRT) dans le format PFX reconnu par Microsoft (IIS et Azure).

openssl pkcs12 -export -out mydomain.pfx -inkey mydomain.key -in mydomain.crt -passout pass:MyPassword

Adapter MyPassword avec un mot de passe personnel.

5. Installer le certificat validé par le CA, dans votre serveur web.

Télécharger le fichier PFX généré précédemment : http://mydomain.com/.well-known/acme-challenge/mydomain.pfx

Ensuite, il suffit de l’importer dans le portail Azure et de le relier à vos hôtes (SSL Type = SNI).

Renouvellement

La procédure de renouvellement est similaire. Il suffit d’ajouter les paramètres –renew 10 –issue-code 100 à la commande le.exe ; et d’exporter le certificat au format PFX pour le ré-importer dans Azure (voir https://zerossl.com/usage.html).

Cette procédure peut être automatisée. Voir l’article de Benoît Sautière.

Laisser un commentaire

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