Adam de Automator
Als u al remote commando ‘ s uitvoert met PowerShell Remoting (PSRemoting), weet u hoe handig de functie is. Je kunt verbinding maken met een of meer externe computers en ze beheren alsof ze lokaal zijn. PSRemoting hangt af van Windows Remote Management (WinRm) om het te laten gebeuren, en als je geen gebruik maakt van WinRM via SSL, je zou jezelf openstellen voor een aantal beveiligingsproblemen.
in deze hands-on handleiding leert u hoe u Windows op de client en server kunt instellen om WinRM over HTTPS (SSL) te gebruiken en hoe u certificaten kunt gebruiken om te authenticeren wanneer u WinRM over HTTPS gebruikt.
inhoudsopgave:
Prerequisites
als u samen met deze tutorial walkthrough wilt volgen, zorg er dan voor dat u het volgende hebt:
- een Windows 7 + of Server 2008 R2 machine om te dienen als de client machine. Deze tutorial zal Windows gebruiken 10.
- een Windows 7 + of Server 2008 R2+ machine om te dienen als de server machine. Deze tutorial zal Windows Server 2019 gebruiken.
- toegang tot een lokaal beheerdersaccount of een account met lokale beheerdersrechten op zowel de client-als de server-machines.
- een Active Directory Certificate Services (ADCS) Public Key Infrastructure (PKI) instellen. Het zou helpen als je ADCS geïmplementeerd voor de productie implementaties, maar het is optioneel voor deze tutorial en testen. De tutorial zal aannemen dat de PKI is ingesteld als een onderneming of standalone CA.
waarom WinRM over SSL gebruiken?
PSRemoting, out of the box, maakt gebruik van WinRM en stelt u in staat om client machines op afstand te beheren. Zodra PSRemoting stelt een sessie over WinRM, het versleutelt vervolgens alle communicatie van client naar server. Ook is de installatieprocedure om PSRemoting zonder HTTPS te implementeren vrij eenvoudig.
als PSRemoting al sessiecommunicatie versleutelt, waarom dan de moeite nemen om zoiets als ADCS in te stellen en certificaten te beheren als het al versleuteld is?
omdat tijdens het authenticatieproces referenties in onveilige formaten kunnen worden verzonden, afhankelijk van het gebruikte authenticatietype.
een van de makkelijkste manieren om PSRemoting veiliger te maken is het gebruik van WinRM over HTTPS in plaats van HTTP. HTTPS omvat uw volledige verbindingsstroom, inclusief verificatie binnen de coderingslaag die WinRM al gebruikt. HTTPS biedt ook tegelijkertijd een manier om de server waarmee u verbinding maakt te valideren is wat je denkt dat het is.
WinRM configureren met een zelfondertekend certificaat
laten we nu beginnen met de demonstraties. Voor de eerste truc, je gaat om te leren hoe het opzetten encrypt PSRemoting communicatie met WinRm via SSL via een zelf-ondertekend certificaat.
het gebruik van een zelfondertekend certificaat is een geweldige manier om een testomgeving op te zetten zonder je zorgen te maken over een PKI zoals ADCS. Wanneer u een zelfondertekend certificaat gebruikt, genereert u een certificaat dat de server zelf ondertekent en dat in principe voor zichzelf instaat.
er bestaan certificaten voor het uitvoeren van twee taken; een verbinding authenticeren en versleutelen. Het gebruik van een zelfondertekend certificaat implementeert alleen het laatste. Als u de identiteit van een server wilt valideren, moet u altijd PKI-certificaten gebruiken. Door PKI verstrekte certificaten bieden een enkele bron van vertrouwen vs.elk zelfondertekend certificaat afzonderlijk handmatig moeten vertrouwen.
het configureren van WinRM via SSL met een zelfondertekend certificaat vereist vier stappen op hoog niveau:
- het zelfgetekende certificaat maken op de bestemmingsmachine.
- de WinRM-webserver (listener) van de server configureren om het zelfondertekende certificaat te gebruiken voor authenticatie.
- de juiste poorten openen op de Windows-firewall van de doelcomputer.
- een opdracht uitvoeren om een verbinding op afstand op de client te starten met behulp van een PowerShell-cmdlet zoals
Enter-PSSession
.
laten we nu door elke stap gaan.
een zelfondertekend certificaat aanmaken
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.
tijdens ServerB met een Windows PowerShell-console die geopend is als administrator, voert u de New-SelfSignedCertificate
cmdlet uit zoals hieronder weergegeven. Het uitvoeren van de onderstaande opdracht genereert een certificaat voor ServerB.domain.com in het persoonlijke certificaatarchief van de lokale machine.
New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
de parameter Subject
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 zich in een werkgroep bevindt, geef altijd een domeinnaam op, bijv. domain.com of lab.lokaal. Wanneer u verbinding maakt met de bestemmingsmachine, moet de DNS-naam waarmee u verbinding maakt exact overeenkomen met deze onderwerpnaam, zodat de verbinding mislukt.
met TextExtension
kunt u het sleutelgebruik van het certificaat definiëren (2.5.29.37
), wat bepaalt waarvoor het certificaat mag worden gebruikt. Definieer sleutelgebruik voor serververificatie ({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 verifiëren.
na het uitvoeren van
New-SelfSignedCertificates
retourneert het de duimafdruk van het gegenereerde certificaat. Sla dit op zoals je het nodig hebt voor het volgende commando.
de WinRM-luisteraar
nadat u het zelfondertekende certificaat op de server hebt gemaakt, configureert u 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 dat op de server is geconfigureerd. Als de server meerdere IP-adressen heeft geconfigureerd, kunt u hier een specifiek IP-adres definiëren.
vervang de plaatshouder
<cert thumbprint here>
door de duimafdruk die in de laatste stap is teruggegeven.
winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
het openen van de WinRM SSL Firewall poort
vervolgens, als u de Windows firewall gebruikt, moet u toestaan dat HTTPS-verkeer naar de server komt via de Standaard HTTPS poort 5986
.
Open de firewall-poort voor WinRM via HTTPS met behulp van PowerShell door het onderstaande commando uit te voeren.
$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam
verbinden met de Server via SSL
u hebt nu de externe Windows-Server geconfigureerd om WinRM-verbindingen via SSL te accepteren. Op dit moment, kom terug naar de client en initiëren PSRemoting commando ‘ s die u wilt testen. U kunt bijvoorbeeld de cmdlet Enter-PSSession
of Invoke-Command
proberen. Alleen nu, je VERBINDING een beetje anders dan met de standaard HTTP-verbinding.
verbinden via HTTPS vereist doorgaans een enkele parameter UseSSL
. Deze parameter vertelt het commando om te zoeken naar een HTTPS WinRM luisteraar VS. een HTTP luisteraar zoals het standaard zou doen. De UseSSL
parameter is beschikbaar voor meer PSRemoting commando ‘ s.
voor het testen, voer Enter-PSSession
uit met de FQDN van de server zoals gedefinieerd door het zelfondertekende certificaat subject, een PSCredential object om de gebruikersnaam en wachtwoord te definiëren, en ten slotte de UseSSL
switch parameter.
Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL
als u het bovenstaande commando uitvoert, ontvangt u een foutmelding omdat u de WinRM-luisteraar op de server hebt geconfigureerd om een zelfondertekend certificaat te gebruiken. Wanneer de PSRemoting client probeert te authenticeren bij de server, zal het proberen om het certificaat te valideren, en het kan niet. Een zelfondertekend certificaat heeft geen vertrouwensketen die het commando kan volgen en mislukt.
als u verbinding wilt maken met de server met een zelfondertekend certificaat, moet u de controle op certificaatvertrouwensrelatie overschrijven. U kunt dit doen door een PSSessionOption genaamd SkipCACheck
aan te maken met behulp van de cmdlet New-PSSessionOption
en deze door te geven aan het commando zoals hieronder getoond.
$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL
u kunt veel verschillende pssessionoption-objecten definiëren om opties voor uw Externe verbinding toe te voegen die niet direct in de cmdlet
Enter-PSSession
zijn opgenomen.
probeer opnieuw verbinding te maken en PowerShell moet u nu vragen om referenties. Eenmaal geleverd, moet u nu verbinding maken met de server met WinRM via SSL!
WinRM configureren met een CA-ondertekend certificaat
Als u van plan bent PSRemoting met WinRM in productie te gebruiken en zo veilig mogelijk wilt blijven, moet u zich richten op WinRM over SSL met behulp van een certificaat authority (CA)-ondertekend certificaat.
CA-ondertekende certificaten onderhouden een vertrouwensketen en zijn veiliger dan eenvoudige zelfondertekende certificaten omdat zij de identiteit van een certificaatuitgevende instantie valideren.
als u zich in een Active Directory-omgeving bevindt, is een van de meest voorkomende manieren om een CA in te stellen met ADCS. Met ADCS kunt u certificaten implementeren op apparaten en WinRM configureren om deze certificaten te gebruiken.
deze handleiding gaat ervan uit dat u al ADCS hebt ingesteld en in uw omgeving werkt.
voor een snelle installatie kunt u de documentatie van Microsoft volgen, maar voor een productie-implementatie moet u de configuratie grondig onderzoeken, omdat een certificaatautoriteit het centrum is van de versleutelingsinspanningen van een organisatie.
de certificaataanvraag aanmaken
de eerste stap in het gebruik van een certificaat van de CA is het certificaat aanmaken. Als u het certificaat wilt maken, moet u eerst een certificaataanvraag indienen met een CSR (certificate signing request). Zodra deze CSR is gegenereerd, kan deze naar de CA worden verzonden om het certificaat uit te geven.
de stappen van deze sectie zullen werken op ADCS-implementaties wanneer het een Enterprise CA of een standalone CA is. Als u een met advertenties geïntegreerde ondernemingscertificeringsinstantie gebruikt, kunt u inschrijvingscertificaten versnellen zonder de stappen in deze sectie te doorlopen met behulp van automatische inschrijving van certificaten of certificaatsjablonen.
maak op de server (ServerB in deze tutorial) de CSR aan:
- voer certlm uit.msc om Windows certificate manager te openen.
2. Klik met de rechtermuisknop op het persoonlijke archief en selecteer Alle taken —> geavanceerde bewerkingen —> aangepaste aanvraag maken.
3. Voor deze tutorial, laat alle velden als de standaard totdat u naar de certificaat informatie pagina hieronder te zien. Wanneer u hier bent, klik op de details dropdown en selecteer Eigenschappen.
4. Klik op het tabblad onderwerp en wijzig het Type naar algemene naam.
5. Voer nu de volledig gekwalificeerde domeinnaam van de server in als deze is verbonden met een domein of alleen de hostnaam als dit niet het geval is en klik op Toevoegen.
merk op dat Voor gebruik met een WinRM SSL luisteraar, je de algemene 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 verificatie op basis van certificaten gebruikt die later zal worden behandeld, vouwt u de koptekst voor uitgebreid sleutelgebruik uit en voegt u serververificatie toe. Dit sleutelgebruiktype vertelt Windows dat het certificaat moet worden gebruikt voor het verifiëren van een server. Andere opties zijn clientverificatie, Code ondertekening en Document encryptie.
8. Als u op certificaten gebaseerde verificatie wilt instellen, moet u clientverificatie kiezen, 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 cryptografieproviders beschikbaar in Windows, maar u kunt te maken krijgen met incompatibiliteit met oudere software.
10. Sluit het venster Certificaateigenschappen en sla uw instellingen op door op OK te klikken en op Volgende te klikken om verder te gaan met de aanwijzingen.
11. Geef nu een pad om het certificaatverzoek uit te voeren waar u het later kunt ophalen en op Voltooien kunt klikken.
eenmaal voltooid, moet u een certificaataanvraagbestand hebben.
een certificaat aanvragen
zodra u het verzoek hebt aangemaakt, moet u dat verzoek nu indienen bij uw CA, die het certificaat zal genereren. Om dat te doen:
- Navigeer naar uw ADCS-server op http://<server naam FQDN>/certsrv / certrqxt.ASP.
2. Open het certificaataanvraagbestand dat eerder met Kladblok is gemaakt en kopieer de tekst uit het certificaataanvraagbestand naar het vak aanvraag. Er is niets vereist voor extra attributen voor dit certificaat.
3. Klik Op Verzenden. Dit zal uw verzoek indienen bij de CA. Het moet dan tonen u de aanvraag-ID, die later nodig zal zijn. Bewaar dit! Je hebt het later nodig.
4. Maak nu verbinding met de CA-server die deel uitmaakt van uw ADCS-omgeving met Windows Certificate Manager op uw lokale computer of via RDP door certsrv uit te voeren.msc.
5. Klik op hangende aanvragen.
6. Klik met de rechtermuisknop op het lopende verzoek, klik op alle taken en klik op Probleem. Dit zal het verzoek goedkeuren dat u zojuist hebt ingediend op basis van het verzoek-ID van de eerdere stap.
het Certificaat inschrijven
Nu u een certificaat op de CA hebt uitgegeven, is het tijd om het certificaat in te schrijven op de server waarop u WinRM configureert. Deden:
- navigeer vanaf de server waarop u WinRM via SSL installeert naar http://<server naam FQDN>/certckpn.ASP. U zou één enkele certificaataanvraag in behandeling moeten zien.
u kunt het publieke certificaat ophalen van een andere machine indien nodig, maar het starten vanaf de server die u voor WinRM via HTTPS hebt ingesteld vereenvoudigt het proces.
2. Selecteer het verzoek dat u hebt ingediend in de lijst en download de certificaatketen. U moet de volledige certificaatketen downloaden als de server die u WinRM via HTTPS configureert uw CA als rootserver heeft.
3. Open het certificaatketenbestand. U ziet een certificaat voor uw server en certificaten van certificaatauthoriteit hoger in de keten. Onder win2.lab.INT is het gevraagde certificaat en WIN2-CA is het certificaat voor de CA die het certificaat voor win2.lab.int.
4. Dubbelklik op een van de certificaten en klik in het vak dat wordt geopend op de knop Certificaat installeren. Aangezien dit certificaat door de server wordt gebruikt en niet door een specifieke gebruiker, wijzigt u de optie lokale Machine.
5. Ga door met de prompt en laat alles als standaard. De standaardinstellingen moeten het certificaat in het vertrouwde Root Certifications-archief plaatsen.
6. Herhaal nu de stappen 3-5 voor elk van de andere certificaten in de lijst. Als u meer dan één certificaat hebt, moet u ervoor zorgen dat alle andere certificaten in het archief tussenliggende certificaatautoriteiten worden geplaatst.
maak en stel de WinRM https-luisteraar
nu alle certificaten zijn geïnstalleerd, is het tijd om WinRM op uw server zo in te stellen dat het certificaat voor de luisteraar wordt gebruikt.
met PowerShell geopend op de WinRm-server:
- voer het onderstaande commando uit om de WinRm-luisteraar automatisch in te stellen. Het
winrm
commando doet dit door in de lokale machine certificaatarchief te zoeken naar een certificaat dat voldoet aan de vereisten voor WinRM.
winrm quickconfig -transport:https
2. De Windows Firewall blokkeert standaard de WinRM HTTPS-poort van 5986
. Om er zeker van te zijn dat de firewall binnenkomende poort 5986
toestaat, voer je het volgende PowerShell commando uit:
$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam
het testen van de WinRM SSL verbinding
op dit punt bent u klaar om verbinding te maken. Gebruik je favoriete psremoting cmdlets zoals Invoke-Command
of Enter-PSSession
, maak verbinding met de server en gebruik de UseSSL
parameter.
Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)
zorg er altijd voor dat de waarde voor de parameter
ComputerName
exact overeenkomt met de algemene naam die wordt opgegeven tijdens het aanmaken van het certificaat. Als u probeert verbinding te maken met een andere hostnaam of misschien met het IP-adres van de host, ontvangt u een fout in het certificaat dat een fout in de verbinding veroorzaakt.
Certificaatgebaseerde authenticatie instellen
u moet nu al een WinRM-luisteraar hebben ingesteld om HTTPS te gebruiken. Als dit het geval is, kunt u ook een gebruikersverificatiecertificaat gebruiken om u als lokale gebruiker op de externe server te verifiëren. Het gebruik van een gebruikerscertificaat is een van de veiligste, maar het duurt wel even om het in te stellen. U zult merken dat het ook veel herhaald werk, omdat elk certificaat is uniek voor de individuele client machine.
authenticatie op basis van certificaten werkt alleen met lokale gebruikersaccounts en niet met domeingebruikers.
ervan uitgaande dat u een certificaat hebt aangevraagd voor clientverificatie zoals beschreven in de sectie certificaataanvraag maken, lees dan verder:
certificaatverificatie inschakelen en de gebruiker toewijzen op de Server
- voer op de server de opdracht
Set-Item
uit om op certificaten gebaseerde verificatie toe te staan.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true
2. Voer vervolgens Get-ChildItem
uit om het archief van Vertrouwde basiscertificeringsinstanties te bekijken om de miniatuurafdruk van de Ca te vinden die het clientverificatiecertificaat heeft uitgegeven. Hiervoor filtert u certificaten op basis van het onderwerp dat de naam van uw CA bevat.
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}
3. Voer de onderstaande opdracht uit waarbij SubjectName
het onderwerp is van het gebruikerscertificaat dat u hebt opgegeven bij het maken van het certificaat
de CAThumbprint
is de miniatuurafdruk van de CA die is verzameld met de vorige opdracht, en vervolgens wordt gevraagd om referenties zijn de gebruikersnaam en het wachtwoord van de lokale gebruiker die zal worden gebruikt voor de certificaatgebaseerde verificatie.
New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)
verificatie op basis van certificaten testen
nu de toewijzing van certificaat aan Gebruiker is ingesteld, gebruikt u het certificaat op de clientcomputer om te verifiëren zonder referenties op te geven.
op de client in PowerShell, Verkrijg de miniatuurafdruk van het clientcertificaat door te kijken in het persoonlijke certificaatarchief.
Get-ChildItem Cert:\CurrentUser\My
specificeer nu de duimafdruk in de CertificateThumbprint
parameter naar een PSRemoting commando zoals hieronder.
Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>
merk op dat, aangezien op certificaten gebaseerde authenticatie alleen bruikbaar is met een HTTPS-luisteraar
-UseSSL
, dit impliciet is, in tegenstelling tot andere authenticatiemethoden waarbij u SSL moet opgeven.
nu je hebt geleerd hoe je WinRM via SSL kunt instellen, leer je meer over PSRemoting in onze PowerShell Remoting: The Ultimate Guide post!
wilt u meer weten over PowerShell in het algemeen, inclusief veel over PSRemoting? Bekijk PowerShell voor systeembeheerders, het boek!
Leave a Reply