Update: Suite à l'écriture de cet article, Let's Encrypt est arrivé, avec des outils permettant de configurer IIS beaucoup plus facilement - je vous invite à aller aussi lire cet autre article dédié à Let's Encrypt et IIS

Si vous me suivez vous l'avez certainement remarqué, j'ai modifié mon blog il y a peu. J'ai quitté Blogger pour passer à une solution plus souple, basée sur Jekyll, et hébergée chez GitHub.

Aujourd'hui j'ai décidé d'aller plus loin, en hébergeant moi même ce blog, et j'en ai profité pour activer HTTPS. J'ai trouvé assez peu de documentation pour activer HTTPS sur IIS, donc j'ai décidé de noter la marche à suivre.

Préparation du serveur

Pour commencer, il m'a fallu trouver un serveur Windows. J'ai opté pour l'offre VPS Cloud d'OVH, qui propose une machine virtuelle (largement suffisante pour mon blog) avec la licence Windows Server incluse pour 11,99€ par mois (là ça reste cher pour un simple blog, mais je lui trouverai d'autres utilités).

Une fois le serveur disponible, je me suis connecté par RDP (avec l'appli 'Remote Desktop Connection' ou 'Connexion Bureau à Distance) ; et je suis arrivé sur le Server Manager. La première chose à faire est d'installer IIS : Un clic sur Add roles and features, et on suit l'assistant jusqu'à Server Roles, pour sélectionner Web Server (IIS).

Pour mon exemple, j'ai tout simplement créé mon site web http://test.lacasa.fr

Nouveau site web

Activation de HTTPS

Lors de la création de mon site, j'ai choisi de répondre au domaine test.lacasa.fr en http sur le port 80. Je ne pouvais pas choisir https, car je n'ai pas encore de certificat. On va donc en créer un.

Certificats du serveur

Dans le Manager IIS, on clique sur le serveur à gauche, puis sur Server Certificates. Puis dans Actions, on clique sur Create Self-Signed Certificate... pour générer un nouveau certificat auto-signé.

Génération du certificat

Maintenant on peut ajouter HTTPS sur le site en faisant un clic droit dessus, et Edit Bindings, puis en ajoutant un binding https.

Nouveau binding https

Et cette fois c'est bon, on peut se connecter au site de manière sécurisée !

Sauf que...

Erreur de certificat

Le certificat créé ne définit pas sur quel domaine il est valide, et n'est pas reconnu par une autorité de certification. Donc de gros warnings s'affichent sur votre site, ce n'est pas vraiment ce que nous voulons.

Installation d'un certificat valide

Pour avoir un certificat valide, il va falloir en obtenir un auprès d'un organisme de certification. Cet organisme va se charger de vérifier que vous êtes bien propriétaire du domaine, et vous envoyer un certificat associé.

Pour commencer, nous devons générer une demande de certificat dans IIS. Dans la liste des certificats du serveur, là où nous avions généré un certificat auto-signé, nous avons une action Create Certificate Request. Cliquez dessus et remplissez les informations demandées.

Demande de certificat

Puis à l'écran suivant, choisissez le service RSA (Microsoft RSA SChannel Cryptographic Provider), et la longueur de la clé. Plus la clé sera longue, plus le chiffrement difficile à casser, mais les performances s'en ressentiront. Actuellement, les organismes de certification demandent une longueur de clé minimale de 2048 bits.

Génération de la clé

La dernière étape va générer une clé privée (stockée sur le serveur) et un fichier texte à envoyer à l'organisme de certification.

La demande de certificat

Vous pouvez maintenant aller acheter votre certificat. Le principe est simple : vous envoyer le fichier texte à l'organisme, qui fera quelques vérifications, et vous renverra un certificat à installer sur le serveur. Le site JeVeuxHTTPS propose un tutorial pour obtenir le certificat chez Gandi. J'ai pour ma part opté pour StartSSL, qui propose un certificat gratuit pour les petits besoins.

Une fois toutes les vérifications faites (ça peut prendre quelques heures), vous recevez enfin le certificat.

Sauvegardez le fichier sur votre serveur (ou recopiez le contenu textuel dans un nouveau fichier, que vous sauvegardez dans un fichier avec une extension .cer), et retournez dans IIS. Dans la liste des actions de certificats, vous pouvez maintenant cliquer sur Complete Certificate Request. Remplissez les 3 informatios demandées : le chemin vers le certificat que vous venez de télécharger, un nom à lui donner (mettez ce que vous voulez, c'est le nom qui s'affichera dans la liste), et choisissez Web hosting comme store.

Sauvegarde du certificat

Attention, lorsque vous validez cet écran, il se peut qu'une erreur apparaisse alors que l'import a bien fonctionné. Raffraichissez la liste des certificats et vérifiez que le nouveau certificat est bien présent.

C'est bon ? Vous pouvez maintenant utiliser ce certificat pour votre site https : faites un clic droit sur le site, Edit bindings, et sélectionner le binding https pour le modifier, vous pouvez maintenant mettre le vrai certificat.

Cette fois ça devrait être bon, vous pouvez vous connecter au site, le navigateur n'affichera plus d'erreur ! C'est grâce à ça que vous voyez un cadenas apparaitre dans la barre d'adresse de votre navigateur.

C'est bon !

C'est bon, mon site est sécurisé ?

Eh bien, pas tout à fait. Lorsqu'on se connecte en HTTPS, IIS aura le choix entre plusieurs protocoles pour sécuriser la communication : SSL (version 2.0 ou 3.0) ou son successeur TLS (version 1.0, 1.1 ou 1.2). Mais les versions de SSL contiennent des failles de sécurité, et il ne faut plus les utiliser - seul TLS doit être actif sur votre serveur. Pour cela, le site JeVeuxHTTPS nous donne la solution : Ouvrez une ligne de commande avec les droits administrateur, et tapez les lignes suivantes pour désactiver SSL et activer TLS si besoin :

REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 2.0\Server" /v Enabled /t REG_DWORD /d 0 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 2.0\Client" /v Enabled /t REG_DWORD /d 0 /f

REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 3.0\Server" /v Enabled /t REG_DWORD /d 0 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\SSL 3.0\Client" /v Enabled /t REG_DWORD /d 0 /f

REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Client" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.0\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f

REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.1\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.1\Client" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.1\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f

REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f

Cette fois c'est bon ! Du moins, pour le moment...

Un dernier point à aborder : lorsque nous avons fait la demande de certificat en passant par IIS, elle a été signée en utilisant l'algorithme SHA1. D'ici peu, il sera recommandé de ne plus utiliser cet algorithme, et de lui préférer SHA256. IIS sera certainement mis à jour, mais en attendant, il est déjà possible de créer une demande de certificat signée avec SHA 256 : la marche à suivre se trouve sur le site certificat.fr.