Als je al externe opdrachten uitvoert met PowerShell Remoting (PSRemoting), dan weet je hoe handig deze functie is. Je kunt verbinding maken met één of meer externe computers en ze beheren alsof ze lokaal zijn. PSRemoting is afhankelijk van Windows Remote Management (WinRm) om dit mogelijk te maken, en als je geen gebruik maakt van WinRM via SSL, loop je mogelijk enkele beveiligingsrisico’s.
In deze praktische handleiding leer je hoe je Windows op de client en server kunt instellen om WinRM via HTTPS (SSL) te gebruiken, en hoe je certificaten kunt gebruiken om te authenticeren bij het gebruik van WinRM via HTTPS.
Vereisten
Als je deze handleiding wilt volgen, zorg er dan voor dat je het volgende hebt:
- A Windows 7+ or Server 2008 R2 machine to serve as the client machine. This tutorial will use Windows 10.
- A Windows 7+ or Server 2008 R2+ machine to serve as the server machine. This tutorial will use Windows Server 2019.
- Toegang tot een lokaal beheerdersaccount of een account met lokale beheerdersrechten op zowel de client- als de servermachines.
- Een Active Directory Certificate Services (ADCS) Public Key Infrastructure (PKI) opzet. Het zou handig zijn als je ADCS implementeert voor productieomgevingen, maar het is optioneel voor deze handleiding en testen. De handleiding gaat ervan uit dat de PKI is ingesteld als een enterprise of standalone CA.
Waarom WinRM via SSL gebruiken?
PSRemoting maakt standaard gebruik van WinRM en stelt je in staat om clientmachines op afstand te beheren. Zodra PSRemoting een sessie opzet via WinRM, versleutelt het alle communicatie van client naar server. Ook is de installatieprocedure om PSRemoting zonder HTTPS te implementeren vrij eenvoudig.
Als PSRemoting al de communicatie van de sessie versleutelt, waarom zou je dan de moeite nemen om iets als ADCS op te zetten en certificaten beheren wanneer het al versleuteld is?
Omdat tijdens het authenticatieproces inloggegevens in onveilige formaten kunnen worden verzonden, afhankelijk van het gebruikte type authenticatie.
Een van de eenvoudigste manieren om PSRemoting veiliger te maken, is WinRM te gebruiken via HTTPS in plaats van HTTP. HTTPS omhult je gehele verbindingsstroom, inclusief authenticatie binnen de versleutelingslaag die WinRM al gebruikt. HTTPS biedt ook tegelijkertijd een manier om te controleren of de server waarmee je verbinding maakt is wat je denkt dat het is.
WinRM configureren met een zelfondertekend certificaat
Laten we nu overgaan naar de demonstraties. Voor de eerste truc ga je leren hoe je PSRemoting-communicatie kunt versleutelen met WinRM via SSL via een zelfondertekend certificaat.
Het gebruik van een zelfondertekend certificaat is een geweldige manier om een testomgeving op te zetten zonder te hoeven omgaan met een PKI zoals ADCS. Wanneer je een zelfondertekend certificaat gebruikt, genereer je een certificaat dat door de server zelf wordt ondertekend en dat in feite voor zichzelf instaat.
Certificaten dienen meestal twee taken uit te voeren: een verbinding authentiseren en versleutelen. Het gebruik van een zelfondertekend certificaat implementeert alleen het laatste. Om de identiteit van een server te valideren, moet je altijd door PKI verstrekte certificaten gebruiken. PKI-verstrekte certificaten bieden één bron van vertrouwen in plaats van dat je elk zelfondertekend certificaat individueel handmatig moet vertrouwen.
Het configureren van WinRM over SSL met een zelfondertekend certificaat vereist vier hoog-niveau stappen:
- Het genereren van het zelfondertekend certificaat op de bestemmingsmachine.
- Het configureren van de WinRM-webserver (luisteraar) op de server om het zelfondertekend certificaat te gebruiken voor authenticatie.
- Het openen van de juiste poorten op de Windows-firewall van de bestemmingsmachine.
- Het uitvoeren van een opdracht om een externe verbinding te initiëren op de client met behulp van een PowerShell-cmdlet zoals
Enter-PSSession
.
Laten we nu elke stap doorlopen.
Het genereren van een zelfondertekend certificaat
De eerste stap is het genereren van een zelfondertekend certificaat op de server. Bij het verbinden zal PSRemoting dit certificaat gebruiken om alle communicatie te versleutelen.
Terwijl u op ServerB bent met een Windows PowerShell-console open als beheerder, voert u het New-SelfSignedCertificate
cmdlet uit zoals hieronder weergegeven. Het uitvoeren van de onderstaande opdracht genereert een certificaat voor ServerB.domain.com in de persoonlijke certificaatopslag van de lokale machine.

De Subject
-parameter moet de volledig gekwalificeerde domeinnaam van de server zijn. WinRM gebruikt het onderwerp om de identiteit van de server te valideren.
Zelfs als de server in een werkgroep staat, moet u altijd een domeinnaam opgeven, bijvoorbeeld domain.com of lab.local. Bij het verbinden met de bestemmingsmachine moet de DNS-naam waarmee u verbinding maakt exact overeenkomen met deze onderwerpsnaam, anders mislukt de verbinding.
De TextExtension
stelt u in staat om het gebruik van de sleutel van het certificaat te definiëren (2.5.29.37
), wat bepaalt waarvoor het certificaat mag worden gebruikt. Definieer sleutelgebruik voor Server-authenticatie ({text}1.3.6.1.5.5.7.3.1
) om ervoor te zorgen dat het certificaat alleen kan worden gebruikt om de identiteit van een server te authenticeren.
Nadat
New-SelfSignedCertificates
is uitgevoerd, wordt de duimafdruk van het gegenereerde certificaat geretourneerd. Sla dit op, want u heeft het nodig voor de volgende opdracht.
Configureren van de WinRM Listener
Zodra je het zelfondertekende certificaat op de server hebt aangemaakt, configureer dan de WinRM luisteraar om dat certificaat te gebruiken voor authenticatie. Gebruik hiervoor het winrm create
commando zoals hieronder getoond.
De Address=*
in het onderstaande commando informeert de luisteraar om te luisteren op elk IP-adres geconfigureerd op de server. Als de server meerdere IP-adressen geconfigureerd heeft, kun je hier een specifiek IP-adres definiëren.
Zorg ervoor dat je de
<cert duimafdruk hier>
tijdelijke aanduiding vervangt door de duimafdruk die teruggegeven is in de laatste stap.

Het Openen van de WinRM SSL Firewallpoort
Vervolgens, als je de Windows firewall gebruikt, moet je HTTPS-verkeer naar de server toestaan via de standaard HTTPS-poort 5986
.
Open de firewallpoort voor WinRM via HTTPS door PowerShell te gebruiken en het onderstaande commando uit te voeren.
Verbinding maken met de Server via SSL
Je hebt nu de externe Windows Server geconfigureerd om WinRM-verbindingen via SSL te accepteren. Kom nu terug naar de client en initieer eventuele PSRemoting-commando’s die je wilt testen. Je kunt bijvoorbeeld proberen de Enter-PSSession
of Invoke-Command
cmdlet. Alleen nu maak je verbinding op een iets andere manier dan met de standaard HTTP-verbinding.
Het verbinden via HTTPS vereist typisch een enkele parameter UseSSL
. Deze parameter vertelt het commando om te zoeken naar een HTTPS WinRM luisteraar in plaats van een HTTP luisteraar zoals standaard het geval zou zijn. De UseSSL
parameter is beschikbaar bij meer PSRemoting commando’s.
Voor het testen, voer Enter-PSSession
uit met opgave van de FQDN van de server zoals gedefinieerd door het zelfondertekende certificaatonderwerp, een PSCredential object om de gebruikersnaam en het wachtwoord te definiëren, en tot slot, de UseSSL
schakelparameter.
Als je het bovenstaande commando uitvoert, ontvang je een foutmelding omdat je de WinRM luisteraar op de server hebt geconfigureerd om een zelfondertekend certificaat te gebruiken. Telkens wanneer de PSRemoting client probeert zich te authenticeren bij de server, zal het proberen het certificaat te valideren, en dit lukt niet. Een zelfondertekend certificaat heeft geen vertrouwensketen die het commando kan volgen en dus mislukt het.

Om verbinding te maken met de server met een zelfondertekend certificaat, moet je de certificaatverificatie overschrijven. Dit kun je doen door een PSSessionOption genaamd SkipCACheck
te creëren met behulp van de New-PSSessionOption
-cmdlet en deze door te geven aan het commando zoals hieronder getoond.
Je kunt veel verschillende PSSessionOption-objecten definiëren om opties toe te voegen voor je externe verbinding die niet rechtstreeks zijn opgenomen in de
Enter-PSSession
-cmdlet. Probeer opnieuw verbinding te maken en PowerShell zou je nu om referenties moeten vragen. Eenmaal verstrekt, zou je nu verbinding moeten kunnen maken met de server via WinRM over SSL!
WinRM configureren met een door een CA ondertekend certificaat
Als je van plan bent PSRemoting te gebruiken met WinRM in productie en zo veilig mogelijk wilt blijven, moet je je richten op WinRM via SSL met een certificaatautoriteit (CA)-ondertekend certificaat.
CA-ondertekende certificaten handhaven een vertrouwensketen en zijn veiliger dan eenvoudige zelfondertekende certificaten omdat ze de identiteit van de certificaatuitgever valideren.
Als je in een Active Directory-omgeving bent, is een van de meest voorkomende manieren om een CA op te zetten met ADCS. Met ADCS kun je certificaten implementeren op apparaten en WinRM configureren om die certificaten te gebruiken.
Deze handleiding gaat ervan uit dat je ADCS al hebt opgezet en werkend hebt in je omgeving.
Voor een snelle installatie kun je de documentatie van Microsoft volgen, maar voor een productie-implementatie zou je de configuratie grondig moeten onderzoeken, aangezien een certificaatautoriteit centraal staat in de versleutelingsinspanningen van een organisatie.
Het aanmaken van het certificaatverzoek
De eerste stap bij het gebruik van een door een CA uitgegeven certificaat is het aanmaken van het certificaat. Om het certificaat aan te maken, moet je eerst een certificaatverzoek uitgeven met behulp van een certificaataanvraag (CSR). Zodra gegenereerd, kan dit CSR vervolgens naar de CA worden gestuurd om het certificaat uit te geven.
De stappen in dit gedeelte zullen werken bij ADCS-implementaties, of het nu een bedrijfs-CA of een op zichzelf staande CA is. Als je een AD-geïntegreerde bedrijfs-CA gebruikt, kun je het inschrijven van certificaten versnellen zonder de stappen in dit gedeelte te doorlopen met behulp van certificaatautomatisering of certificaatsjablonen.
Terwijl je op de server (ServerB in deze tutorial) bent, maak de CSR aan:
- Voer certlm.msc uit om de Windows-certificaatbeheerder te openen.
2. Klik met de rechtermuisknop op de Persoonlijk-opslag en selecteer Alle taken —> Geavanceerde bewerkingen —> Aangepast verzoek maken.
3. Laat voor deze tutorial alle velden standaard totdat je bij de Certificaatinformatie-pagina komt zoals hieronder weergegeven. Wanneer je hier bent, klik op de vervolgkeuzelijst Details en selecteer Eigenschappen.

4. Klik op het tabblad Onderwerp en wijzig het Type naar Gemeenschappelijke naam.
5. Voer nu de volledig gekwalificeerde domeinnaam van de server in als deze is aangesloten op een domein of alleen de hostnaam als dat niet het geval is en klik op Toevoegen.

Merk op dat voor gebruik met een WinRM SSL-luisteraar, je de gemeenschappelijke naam moet gebruiken. De andere opties in de lijst kunnen worden opgenomen, maar zijn niet vereist voor deze implementatie.
6. Klik op het tabblad Extensie.
7. Als u geen certificaatgebaseerde authenticatie gebruikt, die later zal worden behandeld, breid dan de header van uitgebreid sleutelgebruik uit en voeg Serverauthenticatie toe. Dit sleutelgebruikstype vertelt Windows dat het certificaat moet worden gebruikt voor het authenticeren van een server. Andere opties zijn Clientauthenticatie, Codesignering en Documentversleuteling.
8. Als u certificaatgebaseerde authenticatie wilt instellen, zorg er dan voor dat u Clientauthenticatie kiest, zoals hieronder weergegeven.

9. Klik vervolgens op het tabblad Privésleutel en let op de Sleutelopties. Wijzig de standaard sleutelgrootte van 1024 naar minstens 2048 om de beveiliging van het sleutelpaar te versterken.
Er zijn ook sterkere cryptografische providers beschikbaar in Windows, maar u kunt compatibiliteitsproblemen hebben met oudere software.
10. Sluit het venster Certificaateigenschappen en sla uw instellingen op door te klikken op OK en klik op Volgende om door te gaan met de instructies.
11. Geef nu een pad op om het certificaataanvraagbestand uit te voeren waar u het later kunt ophalen en klik op Voltooien.
Zodra dit is voltooid, zou u een certificaataanvraagbestand moeten hebben.
Een certificaat aanvragen
Zodra u de aanvraag hebt gemaakt, moet u deze nu indienen bij uw CA, die het certificaat zal genereren. Om dat te doen:
- Navigeer naar uw ADCS-server op http://<servernaam FQDN>/certsrv/certrqxt.asp.

2. Open het certificaataanvraagbestand dat eerder is aangemaakt met Kladblok en kopieer de tekst uit het certificaataanvraagbestand naar het aanvraagvak. Er is niets vereist voor Aanvullende attributen voor dit certificaat.
3. Klik op Verzenden. Hiermee wordt uw verzoek naar de CA verzonden. Vervolgens zou het u het verzoek-ID moeten tonen, dat later nodig zal zijn. Sla dit op! U heeft het later nodig.
4. Maak nu verbinding met de CA-server die deel uitmaakt van uw ADCS-omgeving met behulp van de Windows-certificaatbeheerder op uw lokale computer of via RDP door certsrv.msc uit te voeren.
5. Klik op Wachtende verzoeken.

6. Klik met de rechtermuisknop op het wachtende verzoek, klik op Alle taken, en klik op Uitgeven. Hiermee wordt het verzoek dat u zojuist heeft ingediend, goedgekeurd op basis van het verzoek-ID uit de vorige stap.
Inschrijving van het certificaat
Nu u een certificaat heeft uitgegeven op de CA, is het tijd om het certificaat in te schrijven op de server waarop u WinRM configureert. Om dat te doen:
- Vanaf de server waarop u WinRM via SSL instelt, navigeert u naar http://<servernaam FQDN>/certckpn.asp. U zou een enkel in behandeling zijnde certificaatverzoek moeten zien.

U kunt het openbare certificaat ophalen vanaf een andere machine indien nodig, maar beginnen vanaf de server waarop u WinRM instelt via HTTPS vereenvoudigt het proces.
2. Selecteer het verzoek dat je hebt ingediend uit de lijst en download de certificaatketen. Je moet de volledige certificaatketen downloaden als de server waarmee je WinRM via HTTPS configureert, je CA heeft als rootserver.

3. Open het certificaatketenbestand. Je zou een certificaat voor je server moeten zien, en eventuele certificaatautoriteitscertificaten hoger in de keten. Onder win2.lab.int bevindt zich het aangevraagde certificaat, en WIN2-CA is het certificaat voor de CA die het certificaat heeft uitgegeven voor win2.lab.int.

4. Dubbelklik op een van de certificaten en klik in het venster dat verschijnt op de Installeer Certificaat knop. Aangezien dit certificaat door de server wordt gebruikt en niet door een specifieke gebruiker, wijzig de optie naar Lokale Machine.

5. Ga verder door de prompt en laat alles standaard. De standaardinstellingen moeten het certificaat in de Trusted Root Certification Store plaatsen.
6. Herhaal nu stappen 3-5 voor elk van de andere certificaten in de lijst. Als je meer dan één certificaat hebt, zorg ervoor dat alle andere certificaten in de Intermediate Certificate Authorities-store worden geplaatst.
Maak een WinRM HTTPS Listener aan en stel deze in
Nu dat alle certificaten zijn geïnstalleerd, is het tijd om WinRM op je server te configureren om dat certificaat voor de listener te gebruiken.
Met PowerShell geopend op de WinRM-server:
- Voer de onderstaande opdracht uit om automatisch de WinRM luisteraar in te stellen. Het
winrm
commando doet dit door de lokale machinecertificaatopslag te doorzoeken naar een certificaat dat voldoet aan de eisen voor WinRM.
2. De Windows Firewall blokkeert standaard de WinRM HTTPS-poort 5986
. Om ervoor te zorgen dat de firewall inkomende poort 5986
toestaat, voer je het volgende PowerShell-commando uit:
Het testen van de WinRM SSL-verbinding
Op dit punt ben je klaar om verbinding te maken. Gebruik je favoriete PSRemoting cmdlets zoals Invoke-Command
of Enter-PSSession
om verbinding te maken met de server en gebruik de parameter UseSSL
.
Zorg er altijd voor dat de waarde voor de parameter
ComputerName
exact overeenkomt met de gemeenschappelijke naam die is opgegeven tijdens het maken van het certificaat. Als je probeert verbinding te maken met een andere hostnaam of misschien het IP-adres van de host, ontvang je een certificaatfout waardoor de verbinding mislukt.
Het instellen van certificaatgebaseerde authenticatie
Op dit moment zou je al een WinRM luisteraar moeten hebben ingesteld om HTTPS te gebruiken. Als dat het geval is, kun je ook een gebruikersauthenticatiecertificaat gebruiken om te authenticeren als een lokale gebruiker op de externe server. Het gebruik van een gebruikerscertificaat is een van de meest veilige methoden, maar het duurt even om in te stellen. Je zult merken dat het ook veel herhaald werk is, aangezien elk certificaat uniek is voor de individuele clientmachine.
Certificaatgebaseerde authenticatie werkt alleen met lokale gebruikersaccounts en niet met domeingebruikers.
Assuming you requested a certificate for Client Authentication as covered in the Creating the Certificate Request section, lees verder:
Inschakelen van certificaat-authenticatie en toewijzen van de gebruiker op de server
- Op de server, voer het
Set-Item
-commando uit om certificaatgebaseerde authenticatie toe te staan.
2. Voer vervolgens Get-ChildItem
uit om de vertrouwde root-certificeringsinstanties opslag te bekijken om de thumbprint van de CA te vinden die het client-authenticatiecertificaat heeft uitgegeven. Doe dit door certificaten te filteren op het onderwerp dat de naam van uw CA bevat.
3. Voer het onderstaande commando uit waarbij de SubjectName
het onderwerp is van het gebruikerscertificaat dat u heeft opgegeven bij het maken van het certificaat
De CAThumbprint
is de thumbprint van de CA verzameld met het vorige commando, en vervolgens worden inloggegevens gevraagd voor de gebruikersnaam en het wachtwoord van de lokale gebruiker die zal worden gebruikt voor certificaatgebaseerde authenticatie.
Testen van certificaatgebaseerde authenticatie
Nu de koppeling van certificaat naar gebruiker is ingesteld, gebruik het certificaat op de clientmachine om te authenticeren zonder inloggegevens op te geven.
Op de client in PowerShell, krijg de thumbprint van het clientcertificaat door te kijken in de Persoonlijke certificaatopslag.
Specificeer nu de thumbprint in de CertificateThumbprint
-parameter voor een PSRemoting-commando zoals hieronder.
Merk op dat aangezien certificaatgebaseerde authenticatie alleen bruikbaar is met een HTTPS-luisteraar, wordt
-UseSSL
geïmpliceerd, in tegenstelling tot andere authenticatiemethoden waarbij je moet specificeren dat SSL moet worden gebruikt.
Volgende stappen
Nu je hebt geleerd hoe je WinRM over SSL moet instellen, kun je meer te weten komen over PSRemoting in onze post over PowerShell Remoting: de ultieme gids!
Wil je meer weten over PowerShell in het algemeen, inclusief veel informatie over PSRemoting? Bekijk PowerShell voor systeembeheerders, het boek!