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å:

  1. skapa det självsignerade certifikatet på destinationsmaskinen.
  2. konfigurera serverns WinRM-webbserver (lyssnare) för att använda det självsignerade certifikatet för autentisering.
  3. öppnar lämpliga portar på destinationsmaskinens Windows-brandvägg.
  4. 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'
skapa självsignerat certifikat.
skapa självsignerat certifikat.

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>"}'
skapa WinRM-lyssnare med självsignerat certifikat.
skapa WinRM-lyssnare med självsignerat certifikat.

ö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.

misslyckas certifikatutfärdarens förtroendekontroll med självsignerat certifikat.
felaktig certifikatutfärdares förtroendekontroll med självsignerat certifikat.

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:

  1. 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.

skapa en anpassad certifikatbegäran.
skapa en anpassad certifikatbegäran.

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.

ange ämne för certifikatbegäran.
ange ämne för certifikatbegäran.

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.

begär ett klientautentiseringscertifikat.
begär ett klientautentiseringscertifikat.

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:

  1. navigera till din ADCS-server på http://<server namn FQDN> /certsrv / certrqxt.ASP.
webbplats för inlämning av certifikatbegäran.
webbplats för inlämning av certifikatbegäran.

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.

utfärdande av certifikat från väntande begäran.
utfärdande av certifikat från väntande begäran.

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:

  1. 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.
visar status för väntande certifikatbegäran.
visar status för 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.

nedladdning certifikat kedja.
hämtar certifikatkedja.

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.

visar certifikat inuti certifikatkedjan.
visar certifikat inuti certifikatkedjan.

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.

Importera certifikat till den lokala maskincertifikatbutiken.
Importera certifikat till det lokala maskincertifikatlagret.

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:

  1. 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

  1. 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