Als je wilt leren hoe je een IIS-certificaataanvraag genereert, ben je hier aan het juiste adres. In dit artikel ga ik uitleggen hoe ik dit heb gedaan met PowerShell en ook hoe je een certificaat aan een IIS-website koppelt.
Laten we één ding duidelijk maken. Ik haat cryptografie en certificaten. Gedurende mijn carrière ben ik op enkele momenten de “certificaatpersoon” geweest. Het was echter gewoon een andere hoed voor een systeembeheerder.
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.
Laat me je een verhaal vertellen over het automatiseren van het installeren van een certificaat op een IIS-server met PowerShell.
De Opdracht
Van een client een nieuw openbaar Digicert-certificaat aanvragen, het installeren op een externe Windows Server 2012 R2 Core Server met IIS 8.5 in een werkgroep, een SSL-binding instellen naar een website en het geïnstalleerde certificaat gebruiken voor de binding. Simpel, toch? LOLz!
Hoe het Gedaan wordt, Jongen!
In een notendop zijn er X stappen nodig om dit te laten gebeuren.
- Genereer een IIS-certificaataanvraag op de computer waar het certificaat zal worden geïnstalleerd. In mijn geval had ik alleen WinRM-toegang, dus moest ik certreq.exe op de externe server uitvoeren met
Invoke-Command
en de inhoud van de CSR naar een lokaal bestand sturen. - Haal de CSR op die door een openbare CA is ondertekend. (Geen hulp hier – er kwam zojuist een mooi certificaat terug van beveiliging waarmee ik heb samengewerkt). In mijn geval gaf het beveiligingsteam me een P7B-verzameling van certificaten samengevoegd in een .CER-bestand, waarin het certificaat stond waar ik naar op zoek was, evenals de tussenliggende certificaten. Hier moest ik wat mee rommelen om het te laten werken.
- Voltooi het ondertekenen van het certificaataanvraag op de computer waar het certificaat zal worden geïnstalleerd. Hiermee wordt het certificaat in de certificaatopslag geplaatst.
- Maak een SSL IIS-webbinding op de server.
- Koppel het certificaat aan de webbinding.
Het genereren van het IIS-certificaatverzoek
Uw eerste taak zal zijn om certreq.exe uit te voeren met behulp van dit PowerShell IIS-script op de externe server om een aanvraagbestand te genereren. Hiervoor vereist certreq.exe een INF-bestand als invoer. Dit bestand wordt gebruikt voor alle verschillende opties die uw certificaat uiteindelijk zal hebben. Zonder al te veel in detail te treden, dit is een kopie van het INF-bestand dat ik gebruikte.
U zult zien in de New-CertificateSigningRequest
functie dat ik het heel eenvoudig voor u maak om dit aan te passen. Eigenlijk zult u dit bestand nooit zien als u mijn functies gebruikt, omdat het slechts tijdelijk nodig is om de CSR (aanvraagbestand) te maken.
Vervolgens moet u dit INF-bestand op de externe server krijgen en certreq.exe uitvoeren met de volgende parameters zoals certreq.exe -new "$InfFilePath" "$reqFilePath"
.
Dit zal een CSR (aanvraagbestand) genereren op de externe computer. Vervolgens moet je dit bestand naar je beveiligingsteam sturen. Dit zal ook een certificaat creëren dat zowel de privésleutel als de openbare sleutel bevat in de Certificaat Uitgegeven Aanvragen in de context van de lokale machine.

Het voltooien van het IIS-certificaatverzoek
In mijn geval kreeg ik slechts één CER-bestand terug. Ik heb een functie gemaakt in dit PowerShell IIS-script om dit rechtstreeks te importeren in de Persoonlijke opslag in de context van de lokale machine om te ontdekken dat IIS het niet kon zien. De reden hiervoor was dat het certificaat ook de privésleutel moest bevatten. Het eenvoudig importeren van het certificaat in de Persoonlijke opslag zou niet werken. Ik moest het certificaatverzoek voltooien met behulp van certreq.exe.
Om dit te doen, moet je het certificaat dat je van je beveiligingsteam ontvangt naar de externe server kopiëren en vervolgens certreq.exe uitvoeren zoals dit certreq.exe -accept -machine "C:\issuedcert.cer"
.
Je moet er altijd voor zorgen dat het responscertificaat altijd in de context van de lokale machine terechtkomt door de parameter -machine
te gebruiken. Dit zou volgens alles wat ik heb gelezen succesvol moeten worden voltooid, maar dat was absoluut niet het geval voor mij. Om een of andere reden kreeg ik een foutmelding die er ongeveer zo uitzag:

Het blijkt dat dit betekent dat de openbare sleutel in het aanvraagbestand niet overeenkwam met wat door het beveiligingsteam werd geretourneerd. Om dit te testen, voer eenvoudig certutil.exe -dump requestfile.req
en certutil -dumpissuedcert.cer
uit. Blader door de output totdat je het gedeelte met de openbare sleutel ziet.

Kopieer elk van deze privésleutels en vergelijk ze in een teksteditor om ervoor te zorgen dat ze hetzelfde zijn. Als dat niet het geval is, neem contact op met uw beveiligingsteam omdat uw verzoek niet correct is ondertekend!
Als die overeenkomen, zit u goed en zou u die foutmelding niet moeten ontvangen.
Maak de SSL-binding
Voer op de externe server het volgende uit:
Voeg het certificaat toe aan de SSL-binding
Voer op de externe server het volgende uit:
Krijg het PowerShell IIS-script
Als alles goed gaat, ben je klaar! Als je wat hulp nodig hebt, heb ik drie functies gemaakt om het gemakkelijker te maken. Ga naar mijn Github-repo om de functies te krijgen:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
Voorbeeldcode
Gerelateerde lectuur
Zorg ervoor dat je ook deze andere ATA-blogposts bekijkt over het beheren van IIS met PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/