Adam Automator
om du redan kör fjärrkommandon med PowerShell Remoting (PSRemoting) vet du hur bekväm funktionen är. Du kan ansluta till en eller flera fjärrdatorer och hantera dem som om de var lokala. PSRemoting beror på Windows Remote Management (WinRm) för att få det att hända, och om du inte använder WinRM över SSL kan du öppna dig för vissa säkerhetsproblem.
i den här praktiska handledningen kommer du att lära dig hur du ställer in Windows på klienten och servern för att använda WinRM över HTTPS (SSL) och hur du använder certifikat för att autentisera när du använder WinRM över HTTPS.
Innehållsförteckning
förutsättningar
om du vill följa med denna handledning genomgång, se till att du har följande:
- en Windows 7+ eller Server 2008 R2-maskin för att fungera som klientmaskin. Denna handledning kommer att använda Windows 10.
- en Windows 7+ eller Server 2008 R2+ maskin för att fungera som server maskin. Denna handledning kommer att använda Windows Server 2019.
- åtkomst till ett lokalt administratörskonto eller ett konto med lokala administratörsrättigheter på både klient-och servermaskinerna.
- en Active Directory Certificate Services (ADCS) Public Key Infrastructure (PKI) inrättas. Det skulle hjälpa om du implementerade ADC för produktionsimplementeringar, men det är valfritt för denna handledning och testning. Handledningen kommer att anta PKI är inställd som ett företag eller fristående CA.
Varför använda WinRM över SSL?
PSRemoting, ur lådan, använder WinRM och låter dig hantera klientmaskiner på distans. När PSRemoting etablerar en session över WinRM krypterar den all kommunikation från klient till server. Installationsproceduren för att implementera PSRemoting utan HTTPS är också ganska enkel.
om PSRemoting redan krypterar sessionskommunikation, varför gå igenom besväret med att konfigurera något som ADC och hantera certifikat när det redan är krypterat?
eftersom autentiseringsuppgifter kan skickas i osäkra format under autentiseringsprocessen beroende på vilken autentiseringstyp som används.
ett av de enklaste sätten att göra PSRemoting säkrare är att använda WinRM över HTTPS istället för HTTP. HTTPS omsluter hela anslutningsströmmen, inklusive autentisering i det krypteringslager som WinRM redan använder. HTTPS ger också samtidigt ett sätt att validera servern du ansluter till är vad du tror att det är.
konfigurera WinRM med ett självsignerat certifikat
Låt oss nu hoppa in i demonstrationerna. För det första tricket kommer du att lära dig hur du ställer in kryptera PSRemoting kommunikation med WinRm över SSL via ett självsignerat certifikat.
att använda ett självsignerat certifikat är ett bra sätt att skapa en testmiljö utan att oroa sig för en PKI som ADCS. När du använder ett självsignerat certifikat genererar du ett certifikat som servern själv signerar som i princip garanterar sig själv.
certifikat finns för att utföra två uppgifter typiskt; autentisera en anslutning och kryptera den. Att använda ett självsignerat certifikat implementerar endast det senare. För att validera en servers identitet måste du alltid använda PKI-tillhandahållna certifikat. PKI-tillhandahållna certifikat ger en enda källa till förtroende vs. att behöva lita på varje självsignerat certifikat individuellt manuellt.
konfigurera WinRM över SSL med ett självsignerat certifikat kräver fyra steg på hög nivå:
- skapa det självsignerade certifikatet på destinationsmaskinen.
- konfigurera serverns WinRM-webbserver (lyssnare) för att använda det självsignerade certifikatet för autentisering.
- öppnar lämpliga portar på destinationsmaskinens Windows-brandvägg.
- exekvera ett kommando för att initiera en fjärranslutning på klienten med en PowerShell cmdlet som
Enter-PSSession
.
Låt oss nu gå igenom varje steg.
skapa ett självsignerat certifikat
det första steget är att generera ett självsignerat certifikat på servern. Vid anslutning använder PSRemoting detta certifikat för att kryptera all kommunikation.
medan du är på ServerB med en Windows PowerShell-konsol öppen som administratör, kör cmdlet New-SelfSignedCertificate
som visas nedan. Kör kommandot nedan genererar ett certifikat för ServerB.domain.com i den lokala maskinens personliga certifikatbutik.
New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
parametern Subject
ska vara serverns fullständiga domännamn. WinRm använder ämnet för att validera serverns identitet.
även om servern är i en arbetsgrupp, ange alltid ett domännamn, t. ex., domain.com eller lab.lokalt. När du ansluter till destinationsmaskinen måste DNS-namnet du ansluter till exakt matcha detta ämnesnamn, till anslutningen misslyckas.
TextExtension
låter dig definiera certifikatets nyckelanvändning (2.5.29.37
), som definierar vad certifikatet får användas till. Definiera nyckelanvändning för serverautentisering ({text}1.3.6.1.5.5.7.3.1
) för att säkerställa att certifikatet endast kan användas för att autentisera en servers identitet.
efter
New-SelfSignedCertificates
körs kommer det att returnera tumavtrycket för certifikatet det genererade. Spara detta eftersom du behöver det för nästa kommando.
konfigurera WinRM-lyssnaren
när du har skapat det självsignerade certifikatet på servern konfigurerar du WinRm-lyssnaren för att börja använda certifikatet för autentisering. För att göra det, använd kommandot winrm create
som visas nedan.
Address=*
i kommandot nedan informerar lyssnaren om att lyssna på vilken IP-adress som är konfigurerad på servern. Om servern har flera IP-adresser konfigurerade kan du definiera en specifik IP-adress här.
var noga med att ersätta
<cert thumbprint here>
platshållaren med tumavtrycket som returnerades i det sista steget.
winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
öppna WinRM SSL-Brandväggsporten
nästa, om du använder Windows-brandväggen, måste du tillåta HTTPS-trafik som kommer in i servern över standard HTTPS-porten 5986
.
öppna brandväggsporten för WinRM över HTTPS genom att använda PowerShell genom att köra kommandot nedan.
$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam
ansluta till servern via SSL
du har nu konfigurerat den fjärranslutna Windows-servern för att acceptera WinRM-anslutningar via SSL. Vid den här tiden, kom tillbaka till klienten och initiera alla psremoting-kommandon som du vill testa. Du kan till exempel prova cmdlet Enter-PSSession
eller Invoke-Command
. Först nu ansluter du lite annorlunda än med standard HTTP-anslutningen.
anslutning via HTTPS kräver vanligtvis en enda parameter UseSSL
. Denna parameter berättar kommandot för att leta efter en HTTPS WinRM lyssnare vs. en HTTP lyssnare som det skulle som standard. Parametern UseSSL
är tillgänglig på fler psremoting-kommandon.
för testning, kör Enter-PSSession
som tillhandahåller serverns FQDN enligt definitionen av det självsignerade certifikatämnet, ett PSCredential-objekt för att definiera användarnamnet och lösenordet och slutligen UseSSL
switch-parametern.
Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL
om du kör ovanstående kommando får du ett felmeddelande eftersom du har konfigurerat WinRM-lyssnaren på servern för att använda ett självsignerat certifikat. När psremoting-klienten försöker autentisera till servern kommer den att försöka validera certifikatet, och det kan inte. Ett självsignerat certifikat har inte en förtroendekedja som kommandot kan följa och misslyckas.
om du vill ansluta till servern med ett självsignerat certifikat måste du åsidosätta certifikatförtroendekontrollen. Du kan göra det genom att skapa en PSSessionOption som heter SkipCACheck
med hjälp av New-PSSessionOption
cmdlet och skicka den till kommandot som visas nedan.
$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL
du kan definiera många olika pssessionoption-objekt för att lägga till alternativ för din fjärranslutning som inte ingår i
Enter-PSSession
cmdlet direkt.
försök att ansluta igen och PowerShell bör nu fråga dig om referenser. När du väl har tillhandahållit bör du nu ansluta till servern med WinRM över SSL!
konfigurera WinRM med ett CA-signerat certifikat
om du tänker använda Psremoting med WinRM i produktion och vill förbli så säker som möjligt måste du fokusera på WinRM över SSL med ett certifikatutfärdare (CA)-signerat certifikat.
CA-signerade certifikat upprätthåller en förtroendekedja och är säkrare än enkla självsignerade certifikat eftersom de validerar en certifikatutgivares identitet.
om du befinner dig i en Active Directory-miljö är ett av de vanligaste sätten att konfigurera en certifikatutfärdare med ADC: er. Med ADCS kan du distribuera certifikat till enheter och konfigurera WinRM för att använda dessa certifikat.
denna handledning kommer att anta att du redan har ADC: er installerade och arbetar i din miljö.
för en snabb installation kan du följa Microsofts dokumentation, men för en produktionsdistribution bör du undersöka konfigurationen kraftigt eftersom en certifikatutfärdare står i centrum för en organisations krypteringsinsatser.
skapa certifikatbegäran
det första steget i att använda ett CA-utfärdat certifikat är att skapa certifikatet. För att skapa certifikatet måste du först utfärda en certifikatbegäran med en certifikatsigneringsbegäran (CSR). En gång genererad kan denna CSR sedan skickas till CA för att utfärda certifikatet.
det här avsnittets steg fungerar på ADCs-distributioner när det är en företagscertifikatutfärdare eller en fristående certifikatutfärdare. Om du använder en ANNONSINTEGRERAD FÖRETAGSCERTIFIKATUTFÄRDARE kan du påskynda inskrivning av certifikat utan att gå igenom stegen i det här avsnittet med hjälp av automatisk registrering av certifikat eller certifikatmallar.
när du är på servern (ServerB i denna handledning) skapar du CSR:
- kör certlm.msc för att öppna Windows certificate manager.
2. Högerklicka på den personliga butiken och välj alla uppgifter —> avancerade operationer —> skapa Anpassad begäran.
3. För denna handledning, lämna alla fält som standard tills du kommer till Certifikatinformationssidan nedan. När du kommer hit klickar du på rullgardinsmenyn detaljer och väljer Egenskaper.
4. Klicka på fliken ämne och ändra typen till vanligt namn.
5. Ange nu serverns fullt kvalificerade domännamn om det är anslutet till en domän eller bara värdnamnet om det inte är det och klicka på Lägg till.
Observera att för användning med en WinRM SSL-lyssnare måste du använda det vanliga namnet. De andra alternativen i listan kan inkluderas men krävs inte för denna distribution.
6. Klicka på fliken Tillägg.
7. Om du inte använder certifikatbaserad autentisering som kommer att täckas senare, expandera rubriken utökad nyckelanvändning och Lägg till serverautentisering. Den här typen av nyckelanvändning talar om för Windows att certifikatet ska användas för att autentisera en server. Andra alternativ inkluderar klientautentisering, kodsignering och Dokumentkryptering.
8. Om du vill ställa in certifikatbaserad autentisering, se till att du väljer klientautentisering, som visas nedan.
9. Klicka sedan på fliken privat nyckel och Lägg märke till Nyckelalternativen. Ändra standardnyckelstorleken från 1024 till minst 2048 för att stärka nyckelparets säkerhet.
det finns också starkare kryptografiska leverantörer tillgängliga i Windows, men du kan möta inkompatibilitet med äldre programvara.
10. Stäng fönstret Certifikategenskaper och spara dina inställningar genom att klicka på OK och klicka på Nästa för att fortsätta med anvisningarna.
11. Ange nu en sökväg för att mata ut certifikatbegäran där du kan hämta den senare och klicka på Slutför.
när du är klar bör du ha en certifikatbegäran.
begär ett certifikat
när du har skapat begäran måste du nu skicka den begäran till din CA, som genererar certifikatet. Att göra det:
- navigera till din ADCS-server på http://<server namn FQDN> /certsrv / certrqxt.ASP.
2. Öppna certifikatbegäran som skapats tidigare med anteckningsblock och kopiera texten från certifikatbegäran till rutan begäran. Inget krävs för ytterligare attribut för detta certifikat.
3. Klicka På Skicka. Detta kommer att skicka din begäran till CA. Det ska då visa dig begäran ID, som kommer att krävas senare. Spara det här! Du behöver det senare.
4. Anslut nu till CA-servern som ingår i din ADCS-miljö med Windows Certificate Manager på din lokala dator eller via RDP genom att köra certsrv.msc.
5. Klicka på väntande förfrågningar.
6. Högerklicka på den väntande begäran, klicka på alla uppgifter och klicka på problem. Detta kommer att godkänna begäran som du just skickat baserat på begäran ID från det tidigare steget.
registrera certifikatet
nu när du har utfärdat ett certifikat på certifikatutfärdaren är det dags att registrera certifikatet på servern du konfigurerar WinRM på. Att göra det:
- från servern du ställer in WinRM över SSL på, Navigera till http://<servernamn FQDN> /certckpn.ASP. Du bör se en enda väntande certifikatbegäran.
du kan hämta det offentliga certifikatet från en annan maskin om det behövs, men från servern du ställer in för WinRM via HTTPS förenklar processen.
2. Välj begäran som du skickade från listan och ladda ner certifikatkedjan. Du bör ladda ner hela certifikatkedjan om servern du konfigurerar WinRM via HTTPS har din CA som en rotserver.
3. Öppna certifikatkedjefilen. Du bör se ett certifikat för din server och alla certifikat för certifikatutfärdare högre i kedjan. Nedan win2.Lab.INT är det begärda certifikatet, och WIN2-CA är certifikatet för CA som utfärdade certifikatet för win2.lab.int.
4. Dubbelklicka på ett av certifikaten och klicka på knappen Installera certifikat i rutan som öppnas. Eftersom detta certifikat kommer att användas av servern och inte av en specifik användare, ändra alternativet till lokal maskin.
5. Fortsätt genom prompten och lämna allt som standard. Standardinställningarna ska placera certifikatet i betrodda Rotcertifieringslager.
6. Upprepa nu steg 3-5 för vart och ett av de andra certifikaten i listan. Om du har mer än ett certifikat, se till att alla andra certifikat placeras i den mellanliggande Certifikatmyndighetens butik.
skapa och konfigurera WinRM HTTPS-lyssnaren
nu när alla certifikat är installerade är det dags att konfigurera WinRM på din server för att använda det certifikatet för lyssnaren.
med PowerShell öppen på WinRm-servern:
- Kör kommandot nedan för att ställa in WinRm-lyssnaren automatiskt. Kommandot
winrm
gör detta genom att söka i det lokala maskincertifikatlagret efter ett certifikat som matchar kraven för WinRM.
winrm quickconfig -transport:https
2. Windows-brandväggen blockerar WinRM HTTPS-porten på 5986
som standard. För att säkerställa att brandväggen tillåter inkommande port 5986
, kör följande PowerShell-kommando:
$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam
testa WinRM SSL-anslutningen
vid denna tidpunkt är du redo att ansluta. Använd dina favorit-PSRemoting-cmdlets som Invoke-Command
eller Enter-PSSession
, Anslut till servern och använd parametern UseSSL
.
Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)
se alltid till att värdet för parametern
ComputerName
exakt matchar det vanliga namnet som tillhandahålls under certifikatskapandet. Om du försöker ansluta till ett annat värdnamn eller kanske värdens IP-adress får du ett felmatchningsfel för certifikat som orsakar ett anslutningsfel.
konfigurera certifikatbaserad autentisering
nu bör du redan ha en WinRM-lyssnare inställd för att använda HTTPS. Om så är fallet kan du också använda ett användarautentiseringscertifikat för att autentisera som en lokal användare på fjärrservern. Att använda ett användarcertifikat är ett av de säkraste men det tar ett tag att konfigurera. Du kommer att upptäcka att det också är mycket upprepat arbete eftersom varje certifikat är unikt för den enskilda klientmaskinen.
certifikatbaserad autentisering fungerar bara med lokala användarkonton och inte domänanvändare.
förutsatt att du begärde ett certifikat för klientautentisering enligt avsnittet Skapa certifikatbegäran, läs vidare:
aktivera Certifikatautentisering och mappa användaren på servern
- på servern kör du kommandot
Set-Item
för att tillåta certifikatbaserad autentisering.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true
2. Kör sedan Get-ChildItem
för att titta på den betrodda Rotcertifikatmyndighetens butik för att hitta CA: s tumavtryck som utfärdade klientautentiseringscertifikatet. För att göra detta, filtrera certifikat efter ämnet som innehåller namnet på din CA.
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}
3. Kör kommandot nedan där SubjectName
är föremål för användarcertifikatet som du angav när du skapade certifikatet
CAThumbprint
är CA: s tumavtryck som samlats in med föregående kommando och sedan uppmanas att ange referenser är användarnamnet och lösenordet för den lokala användaren som kommer att användas för den certifikatbaserade autentiseringen.
New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)
testa certifikatbaserad autentisering
nu när certifikatet till användarmappningen är inställd använder du certifikatet på klientdatorn för att autentisera utan att ange referenser.
på klienten i PowerShell, få klientcertifikatets tumavtryck genom att titta i den personliga certifikatbutiken.
Get-ChildItem Cert:\CurrentUser\My
ange nu tumavtrycket i parametern CertificateThumbprint
till ett psremoting-kommando som nedan.
Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>
Observera att eftersom certifikatbaserad autentisering endast kan användas med en HTTPS-lyssnare
-UseSSL
är underförstådd, till skillnad från andra autentiseringsmetoder där du måste ange att använda SSL.
nu när du har lärt dig hur du ställer in WinRM över SSL, Läs mer om PSRemoting i vår PowerShell Remoting: The Ultimate Guide post!
vill du lära dig mer om PowerShell i allmänhet, inklusive mycket om PSRemoting? Kolla in PowerShell för Sysadmins, boken!
Leave a Reply