Si vous souhaitez apprendre comment générer une demande de certificat IIS, vous êtes au bon endroit. Dans cet article, je vais expliquer comment j’ai fait cela avec PowerShell et également comment lier un certificat à un site web IIS.
Mettons les choses au clair. Je déteste la cryptographie et les certificats. Tout au long de ma carrière, j’ai été le « gars du certificat » à quelques reprises. Cependant, c’était simplement un autre rôle pour un administrateur système.
I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.
Laissez-moi vous raconter une histoire sur l’automatisation de l’installation d’un certificat sur un serveur IIS avec PowerShell.
La mission
À partir d’un client, demandez un nouveau certificat public Digicert, installez-le sur un serveur central Windows Server 2012 R2 Core exécutant IIS 8.5 dans un groupe de travail, définissez une liaison SSL vers un site web et utilisez le certificat installé pour la liaison. Simple, n’est-ce pas ? LOLz!
Comment c’est fait, mon fils !
En résumé, cela prend X étapes pour que cela se produise.
- Générez une demande de certificat IIS sur l’ordinateur où le certificat sera installé. Dans mon cas, je n’avais que l’accès WinRM, j’ai donc dû exécuter certreq.exe sur le serveur distant en utilisant
Invoke-Command
et envoyer le contenu de la CSR vers un fichier local. - Faites signer le CSR par une AC publique. (Pas d’aide ici – un joli certificat est revenu de la sécurité avec laquelle j’ai travaillé). Dans mon cas, l’équipe de sécurité m’a renvoyé une collection P7B de certificats regroupés dans un fichier .CER qui comprenait le certificat que je cherchais ainsi que les certificats intermédiaires. Cela a nécessité un peu de bidouillage pour fonctionner.
- Complétez la demande de signature de certificat sur l’ordinateur où le certificat sera installé. Cela placera le certificat dans le magasin de certificats.
- Créez une liaison web SSL IIS sur le serveur.
- Attachez le certificat à la liaison web.
Génération de la demande de certificat IIS
Votre première tâche consistera à exécuter certreq.exe avec ce script PowerShell IIS sur le serveur distant pour rassembler un fichier de demande. Pour ce faire, certreq.exe nécessite un fichier INF en entrée. Ce fichier est utilisé pour toutes les différentes options que votre certificat finira par avoir. Sans entrer dans les détails, voici une copie du fichier INF que j’utilisais.
Vous verrez dans la fonction New-CertificateSigningRequest
que je facilite énormément la personnalisation de cela. En fait, si vous utilisez mes fonctions, vous ne verrez même jamais ce fichier car il n’est nécessaire que temporairement pour créer le CSR (fichier de demande).
Ensuite, vous devrez obtenir ce fichier INF sur le serveur distant et exécuter certreq.exe avec les paramètres suivants comme certreq.exe -new "$InfFilePath" "$reqFilePath"
.
Cela générera un CSR (fichier de demande) sur l’ordinateur distant. Vous devrez ensuite envoyer ce fichier à votre équipe de sécurité. Cela créera également un certificat contenant à la fois la clé privée et la clé publique dans la section Requêtes de certificats émises dans le contexte de la machine locale.

Finalisation de la demande de certificat IIS
Dans mon cas, j’ai obtenu un seul fichier CER. J’ai créé une fonction dans ce script PowerShell IIS pour l’importer directement dans le magasin Personnel dans le contexte de la machine locale pour constater que IIS ne pouvait pas le voir. La raison était que le certificat devait contenir la clé privée également. L’importation simple du certificat dans le magasin Personnel ne fonctionnerait pas. J’ai dû finaliser la demande de certificat en utilisant certreq.exe.
Pour ce faire, vous devrez copier le certificat que vous recevez de votre équipe de sécurité sur le serveur distant, puis exécuter certreq.exe comme ceci certreq.exe -accept -machine "C:\issuedcert.cer"
.
Vous devrez toujours vous assurer que le certificat de réponse va toujours dans le contexte de la machine locale en utilisant le paramètre -machine
. Cela devrait se terminer avec succès selon tout ce que j’ai lu, mais cela n’a certainement pas fonctionné pour moi. Pour une raison quelconque, je recevais une erreur qui ressemblait à ceci :

Il s’avère que cela signifie que la clé publique dans le fichier de demande ne correspondait pas à ce qui a été renvoyé par l’équipe de sécurité. Pour tester cela, exécutez simplement certutil.exe -dump requestfile.req
et certutil -dumpissuedcert.cer
. Faites défiler la sortie jusqu’à ce que vous voyiez la zone de la clé publique.

Copiez chacune de ces clés privées et comparez-les dans un éditeur de texte pour vous assurer qu’elles sont identiques. Si ce n’est pas le cas, contactez votre équipe de sécurité car votre demande n’a pas été correctement signée !
Si elles correspondent, c’est bon et vous ne devriez pas recevoir cette erreur.
Créez la liaison SSL
Sur le serveur distant, exécutez :
Attachez le certificat à la liaison SSL
Sur le serveur distant, exécutez :
Obtenez le script PowerShell IIS
Si tout se passe bien, vous avez terminé ! Maintenant, si vous avez besoin d’un peu d’aide pour le faire, j’ai créé trois fonctions pour faciliter la tâche. Rendez-vous sur mon dépôt Github pour obtenir les fonctions :
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
Exemple de code
Lecture complémentaire
N’hésitez pas à consulter les autres articles de blog ATA sur la gestion de IIS avec PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/