Windows 2012 server: Certificats au format PFX et compatibilité SNI sous IIS 8.0
Flash news: Windows server 2012 RTM est disponible ;-). Et oui, la dernière que je postais sur cet OS il s’appelait encore Windows 8 server Developer Preview. Nous allons voir dans ce post comment IIS 8 supporte plusieurs certificats SSL sur une IP et port identique, il s’agit du Server Name Indication (SNI), cette fonctionnalité est supporté depuis 2009 par Apache… Nous décrirons aussi les nouvelles fonctionnalités d’export/import des certificats au format PFX pour déployer ces derniers sur plusieurs serveurs Web.
Pour configurer plusieurs sites sous IIS 8 et faire du SNI, lire cet article qui explique la configuration pas à pas. Nous avons donc installé un serveur IIS 8 et installé deux certificats dans le container de certificats Web Hosting de la machine locale: Un premier émis par nôtre CA interne LDAP389-CA ayant comme sujet ldap389.info et un autre émis par un CA externe External-CA ayant comme sujet customer.info. Nous vérifions les bindings SSL de nos sites grâce à l’outil netsh:
netsh http show sslcert |
Sur la figure de gauche le container de certificats machines Web Hosting, sur la figure de droite le résultat de la commande netsh: Les deux certificats sont bien configurés sur le même port, les deux alias ldap389.info et customer.info pointant sur la même IP:
Au niveau client, selon le site accédé, le bon certificat est automatiquement sélectionné, du moment que le client supporte SNI: Pour MS il faut minimum IE 7.0 à partir de Windows Vista (pas de support sur XP quelque soit la version d’IE):
Une fois le premier server Web de notre batterie configuré, nous voulons automatiser l’importation des certificats sur les autres serveurs Web, pour cela nous allons utiliser les PKI client Cmdlets introduites dans Windows server 2012 et Windows 8. Par ailleurs, sous IIS 8 il est possible d’utiliser un partage centralisé des certificats, pour la configuration lire cet article, l’inconvénient est que tous vos fichiers PFX doivent avoir le même mot de passe. Nous privilégions donc pour l’instant l’ancienne méthode d’export/import de chaque certificat au format PFX.
Réalisons d’abord la tâche à la main, afin de voir les nouvelles fonctionalités apportées par Windows 2012 et 8 plus en détail, commençons par exporter notre certificat au format PFX (i.e. avec sa clef privée):
Au moment de choisir un password de protection, on remarque que l’on peut à la place choisir un utilisateur/groupe AD autorisé à accéder à la clef privée du certificat: Plus besoin de protéger le fichier PFX par un mot de passe, on peut le protéger directement via un groupe AD, seuls les membres de ce groupe sont autorisés à y accéder :-). Nous autorisons l’accès seulement au groupe LDAP389-CERTIMPORTERS:
Cette fonctionnalité n’est disponible que si votre server Web s’authentifie auprès d’un DC sous Windows 2012 server. Réalisons maintenant l’import du certificat sur un autre serveur Web avec un compte membre du groupe LDAP389-CERTIMPORTERS, le mot de passe n’est pas requis, et l’import se fait automatiquement:
Passons maintenant à la même manipulation mais cette fois en PowerShell, nous utilisons d’abord le cmdlet Export-PfxCertificate afin d’exporter le certificat installé au format PFX. Nous devons prendre l’objet certificat à exporter et le piper avec le cmdlet d’export. Nous allons donc dans un premier temps chercher le thumbprint de nos certificats situés dans le container machine Web Hosting, pour cela entrer les commandes suivantes:
cd Cert:\localmachine\webhosting dir |
Le thumbprint du certificat customer.info est donc 1CA7EBB210086CCC1D9D4DA12B3E333FA851D090.
Pour exporter le certificat customer.info et toute sa chaîne dans le fichier ldap389customer.pfx, utiliser le onliner suivant:
Get-ChildItem -Path cert:\localMachine\WebHosting\1CA7EBB210086CCC1D9D4DA12B3E333FA851D090 | Export-PfxCertificate -FilePath C:\ldap389customer.pfx -ProtectTo "LDAP389\LDAP389-CERTIMPORTERS" -ChainOption BuildChain |
Le paramètre ProtectTo permet de spécifier le groupe AD accédant à la clef privée du certificat et donc pouvant l’importer sur un autre serveur avec la clef privée. Réaliser de même pour le certificat ldap389.info.
Pour importer le certificat sur une autre machine à partir du fichier PFX, se connecter avec un compte membre de LDAP389-CERTIMPORTERS et utiliser le cmdlet Import-PfxCertificate. Le certificat étant importé dans le container machine Web Hosting, nous lançons la commande:
Import-PfxCertificate -FilePath c:\ldap389customer.pfx cert:\localMachine\WebHosting\ |
De la même manière nous importons le certificat ldap389.info:
Nos certificats sont bien installés sur notre deuxième serveur et prêts à être utilisés avec IIS 8 et faire du SNI, importer les mêmes certificats sur les machines restantes de votre batterie de serveur Web.
This post is also available in: Anglais