Adam the Automator

Se stai già eseguendo comandi remoti con PowerShell Remoting (PSRemoting), sai quanto è comoda la funzione. Sei in grado di connettersi a uno o più computer remoti e gestirli come se fossero locali. PSRemoting dipende da Windows Remote Management (WinRm) per farlo accadere, e se non stai usando WinRM su SSL, potresti aprirti ad alcuni problemi di sicurezza.

In questo tutorial pratico, imparerai come impostare Windows sul client e sul server per utilizzare WinRM su HTTPS (SSL) e come utilizzare i certificati per l’autenticazione quando si utilizza WinRM su HTTPS.

Indice

Prerequisiti

Se desideri seguire questa procedura dettagliata del tutorial, assicurati di avere quanto segue:

  • Una macchina Windows 7 + o Server 2008 R2 per fungere da macchina client. Questo tutorial utilizzerà Windows 10.
  • Una macchina Windows 7 + o Server 2008 R2 + per fungere da macchina server. Questo tutorial utilizzerà Windows Server 2019.
  • Accesso a un account amministrativo locale o a un account con diritti amministrativi locali sui computer client e server.
  • Configurazione di un’infrastruttura a chiave pubblica (PKI) di Active Directory Certificate Services (ADCS). Sarebbe utile se implementassi gli ADC per le implementazioni di produzione, ma è facoltativo per questo tutorial e test. Il tutorial assumerà che il PKI sia impostato come CA aziendale o standalone.

Perché usare WinRM su SSL?

PSRemoting, pronto all’uso, utilizza WinRM e consente di gestire le macchine client in remoto. Una volta che PSRemoting stabilisce una sessione su WinRM, crittografa tutte le comunicazioni dal client al server. Inoltre, la procedura di installazione per implementare PSRemoting senza HTTPS è abbastanza semplice.

Se PSRemoting già crittografa la comunicazione di sessione, perché passare attraverso il fastidio di impostare qualcosa come ADC e gestire i certificati quando è già crittografato?

Perché durante il processo di autenticazione, le credenziali possono essere inviate in formati non sicuri a seconda del tipo di autenticazione utilizzato.

Uno dei modi più semplici per rendere PSRemoting più sicuro è usare WinRM su HTTPS invece di HTTP. HTTPS racchiude l’intero flusso di connessione, inclusa l’autenticazione all’interno del livello di crittografia che WinRM utilizza già. HTTPS fornisce anche contemporaneamente un modo per convalidare il server a cui ci si connette è quello che si pensa che sia.

Configurazione di WinRM con un certificato autofirmato

Passiamo ora alle dimostrazioni. Per il primo trucco, imparerai come impostare la comunicazione encrypt PSRemoting con WinRm su SSL tramite un certificato autofirmato.

L’utilizzo di un certificato autofirmato è un ottimo modo per impostare un ambiente di test senza preoccuparsi di un PKI come ADC. Quando si utilizza un certificato autofirmato, si genera un certificato firmato dal server stesso che garantisce sostanzialmente per se stesso.

Esistono certificati per eseguire in genere due attività: autenticare una connessione e crittografarla. L’utilizzo di un certificato autofirmato implementa solo quest’ultimo. Per convalidare l’identità di un server, è necessario utilizzare sempre i certificati forniti da PKI. I certificati forniti da PKI forniscono un’unica fonte di fiducia rispetto alla necessità di fidarsi individualmente di ogni certificato autofirmato manualmente.

La configurazione di WinRM su SSL con un certificato autofirmato richiede quattro passaggi di alto livello:

  1. Creazione del certificato autofirmato sul computer di destinazione.
  2. Configurazione del server web WinRM (listener) per utilizzare il certificato autofirmato per l’autenticazione.
  3. Apertura delle porte appropriate sul firewall Windows della macchina di destinazione.
  4. Esecuzione di un comando per avviare una connessione remota sul client utilizzando un cmdlet PowerShell come Enter-PSSession.

Passiamo ora attraverso ciascuno dei passaggi.

Creazione di un certificato autofirmato

Il primo passo è generare un certificato autofirmato sul server. Durante la connessione, PSRemoting utilizzerà questo certificato per crittografare tutte le comunicazioni.

Mentre su ServerB con una console Windows PowerShell aperta come amministratore, eseguire il cmdlet New-SelfSignedCertificate come mostrato di seguito. L’esecuzione del comando seguente genera un certificato per ServerB.domain.com nell’archivio certificati personali della macchina locale.

New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
Creazione di certificato autofirmato.
Creazione di un certificato autofirmato.

Il parametro Subject deve essere il nome di dominio completo del server. WinRm utilizza il soggetto per convalidare l’identità del server.

Anche se il server è in un gruppo di lavoro, fornire sempre un nome di dominio, ad esempio, domain.com o in laboratorio.locale. Quando ci si connette al computer di destinazione, il nome DNS a cui ci si connette deve corrispondere esattamente a questo nome dell’oggetto, la connessione fallirà.

TextExtension consente di definire l’utilizzo della chiave del certificato (2.5.29.37), che definisce a cosa è consentito utilizzare il certificato. Definire l’utilizzo della chiave per l’autenticazione del server ({text}1.3.6.1.5.5.7.3.1) per garantire che il certificato possa essere utilizzato solo per autenticare l’identità di un server.

Dopo l’esecuzione di New-SelfSignedCertificates, restituirà l’impronta digitale del certificato generato. Salva questo come ne avrai bisogno per il prossimo comando.

Configurazione del listener WinRM

Una volta creato il certificato autofirm sul server, configurare il listener WinRm per iniziare a utilizzare tale certificato per l’autenticazione. Per fare ciò, utilizzare il comando winrm create come mostrato di seguito.

Il Address=* nel comando seguente informa il listener di ascoltare su qualsiasi indirizzo IP configurato sul server. Se il server ha più indirizzi IP configurati, è possibile definire un indirizzo IP specifico qui.

Assicurarsi di sostituire il segnaposto <cert thumbprint here> con l’impronta digitale restituita nell’ultimo passaggio.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
Creazione di listener WinRM con certificato autofirmato.
Creazione di listener WinRM con certificato autofirmato.

Apertura della porta firewall SSL WinRM

Successivamente, se si utilizza Windows firewall, sarà necessario consentire il traffico HTTPS che entra nel server sulla porta HTTPS predefinita 5986.

Aprire la porta firewall per WinRM su HTTPS utilizzando PowerShell eseguendo il comando seguente.

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam

Connessione al server tramite SSL

Ora è stato configurato il server Windows remoto per accettare connessioni WinRM tramite SSL. A questo punto, torna al client e avvia qualsiasi comando PSRemoting che desideri testare. Ad esempio, puoi provare il cmdlet Enter-PSSession o Invoke-Command . Solo ora, ci si connette un po ‘ diverso rispetto alla connessione HTTP predefinita.

La connessione tramite HTTPS richiede in genere un singolo parametro UseSSL. Questo parametro indica al comando di cercare un listener HTTPS WinRM rispetto a un listener HTTP come farebbe per impostazione predefinita. Il parametro UseSSL è disponibile su altri comandi PSRemoting.

Per il test, eseguire Enter-PSSession fornendo l’FQDN del server come definito dall’oggetto certificato autofirmato, un oggetto PSCredential per definire il nome utente e la password e, infine, il parametro switch UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL

Se si esegue il comando precedente, verrà visualizzato un messaggio di errore poiché è stato configurato il listener WinRM sul server per utilizzare un certificato autofirmato. Ogni volta che il client PSRemoting tenta di autenticarsi sul server, proverà a convalidare il certificato e non può. Un certificato autofirmato non ha una catena di fiducia che il comando può seguire e fallisce.

Verifica attendibilità dell'autorità di certificazione non riuscita con certificato autofirmato.
Verifica della fiducia dell’autorità di certificazione non riuscita con certificato autofirmato.

Per connettersi al server con un certificato autofirmato, è necessario ignorare il controllo di attendibilità del certificato. Puoi farlo creando una PSSessionOption chiamata SkipCACheck usando il cmdlet New-PSSessionOption e passandolo al comando come mostrato di seguito.

$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL

È possibile definire molti oggetti PSSessionOption diversi per aggiungere opzioni per la connessione remota che non sono incluse direttamente nel cmdlet Enter-PSSession.

Prova a connetterti di nuovo e PowerShell dovrebbe ora richiedere le credenziali. Una volta fornito, ora dovresti connetterti al server con WinRM su SSL!

Configurazione di WinRM con un certificato firmato CA

Se si intende utilizzare PSRemoting utilizzando WinRM in produzione e si desidera rimanere il più sicuri possibile, è necessario concentrarsi su WinRM su SSL utilizzando un certificato firmato da un’autorità di certificazione (CA).

I certificati firmati da CA mantengono una catena di fiducia e sono più sicuri dei semplici certificati autofirmati perché convalidano l’identità di un emittente di certificati.

Se ti trovi in un ambiente Active Directory, uno dei modi più comuni per configurare una CA è con gli ADC. Con gli ADC, è possibile distribuire i certificati sui dispositivi e configurare WinRM per utilizzarli.

Questo tutorial assumerà che tu abbia già configurato e funzionante gli ADC nel tuo ambiente.

Per una configurazione rapida è possibile seguire la documentazione di Microsoft, ma per una distribuzione di produzione, è necessario ricercare pesantemente la configurazione poiché un’autorità di certificazione è al centro degli sforzi di crittografia di un’organizzazione.

Creazione della richiesta di certificato

Il primo passo nell’utilizzo di un certificato emesso da CA consiste nella creazione del certificato. Per creare il certificato, è necessario prima emettere una richiesta di certificato utilizzando una richiesta di firma del certificato (CSR). Una volta generato, questo CSR può quindi essere inviato alla CA per emettere il certificato.

I passaggi di questa sezione funzioneranno sulle distribuzioni ADC quando si tratta di una CA aziendale o di una CA autonoma. Se si utilizza una CA enterprise AD-integrated, è possibile accelerare la registrazione dei certificati senza passare attraverso i passaggi in questa sezione utilizzando la registrazione automatica dei certificati o i modelli di certificato.

Mentre sul server (ServerB in questo tutorial), creare il CSR:

  1. Esegui certlm.msc per aprire Gestione certificati di Windows.

2. Fare clic destro sul negozio personale e selezionare Tutte le attività- > Operazioni avanzate- > Crea richiesta personalizzata.

3. Per questo tutorial, lasciare tutti i campi come predefiniti fino ad arrivare alla pagina delle informazioni sul certificato vista di seguito. Quando arrivi qui, fai clic sul menu a discesa Dettagli e seleziona Proprietà.

Creazione di una richiesta di certificato personalizzata.
Creazione di una richiesta di certificato personalizzata.

4. Fare clic sulla scheda Oggetto e modificare il tipo in Nome comune.

5. Ora inserisci il nome di dominio completo del server se è unito a un dominio o solo il nome host se non lo è e fai clic su Aggiungi.

Specifica dell'oggetto per la richiesta di certificato.
Specifica dell’oggetto per la richiesta di certificato.

Si noti che per l’utilizzo con un listener SSL WinRM, è necessario utilizzare il nome comune. Le altre opzioni nell’elenco possono essere incluse ma non sono necessarie per questa distribuzione.

6. Fare clic sulla scheda Estensione.

7. Se non si utilizza l’autenticazione basata su certificato che verrà trattata in seguito, espandere l’intestazione extended key usage e aggiungere l’autenticazione del server. Questo tipo di utilizzo chiave indica a Windows che il certificato deve essere utilizzato per l’autenticazione di un server. Altre opzioni includono l’autenticazione client, la firma del codice e la crittografia dei documenti.

8. Se si desidera impostare l’autenticazione basata su certificato, assicurarsi di scegliere l’autenticazione client, come illustrato di seguito.

Richiesta di un certificato di autenticazione client.
Richiesta di un certificato di autenticazione client.

9. Quindi, fare clic sulla scheda Chiave privata e notare le opzioni chiave. Modificare la dimensione predefinita della chiave da 1024 ad almeno 2048 per rafforzare la sicurezza della coppia di chiavi.

Ci sono anche più forti fornitori di crittografia disponibili in Windows, ma si può affrontare l’incompatibilità con il software più vecchio.

10. Chiudere la finestra Proprietà certificato e salvare le impostazioni facendo clic su OK e fare clic su Avanti per continuare con i prompt.

11. Ora fornisci un percorso per emettere la richiesta di certificato in cui puoi recuperarla in un secondo momento e fare clic su Fine.

Una volta completato, si dovrebbe avere un file di richiesta di certificato.

Richiesta di un certificato

Una volta creata la richiesta, è ora necessario inviare tale richiesta alla CA, che genererà il certificato. Per farlo:

  1. Passare al server ADCS in http://<server nome FQDN> /certsrv / certrqxt.ASP.
Pagina web di presentazione della richiesta di certificato.
Pagina web di invio della richiesta di certificato.

2. Aprire il file di richiesta certificato creato in precedenza con blocco note e copiare il testo dal file di richiesta certificato nella casella Richiesta. Non è richiesto nulla per gli attributi aggiuntivi per questo certificato.

3. Fare clic su Invia. Questo invierà la tua richiesta al CA. Dovrebbe quindi mostrarti l’ID della richiesta, che sarà richiesto in seguito. Salva questo! Ne avrai bisogno dopo.

4. Ora connettiti al server CA che fa parte dell’ambiente ADCS utilizzando Windows Certificate Manager sul computer locale o tramite RDP eseguendo certsrv.MSC.

5. Fare clic su Richieste in sospeso.

Rilascio del certificato dalla richiesta in sospeso.
Rilascio del certificato dalla richiesta in sospeso.

6. Fare clic con il pulsante destro del mouse sulla richiesta in sospeso, fare clic su Tutte le attività e fare clic su Problema. Questo approverà la richiesta appena inviata in base all’ID della richiesta del passaggio precedente.

Registrazione del certificato

Dopo aver emesso un certificato sulla CA, è il momento di registrare il certificato sul server su cui si sta configurando WinRM. Per farlo:

  1. Dal server su cui stai configurando WinRM su SSL, vai a http://<servernome FQDN> /certckpn.ASP. Dovresti vedere una singola richiesta di certificato in sospeso.
Visualizzazione dello stato della richiesta di certificato in sospeso.
Stato di visualizzazione della richiesta di certificato in sospeso.

È possibile recuperare il certificato pubblico da una macchina diversa, se necessario, ma a partire dal server che si sta configurando per WinRM su HTTPS semplifica il processo.

2. Selezionare la richiesta inviata dall’elenco e scaricare la catena di certificati. È necessario scaricare l’intera catena di certificati se il server che si sta configurando WinRM su HTTPS ha la CA come server root.

Scaricare catena di certificati.
Scaricare la catena di certificati.

3. Aprire il file della catena di certificati. Dovresti vedere un certificato per il tuo server e tutti i certificati dell’autorità di certificazione più alti nella catena. Sotto win2.laboratorio.int è il certificato richiesto e WIN2-CA è il certificato per la CA che ha emesso il certificato per win2.lab.int.

Visualizzazione dei certificati all'interno della catena di certificati.
Visualizzazione dei certificati all’interno della catena di certificati.

4. Fare doppio clic su uno dei certificati e, nella casella che si apre, fare clic sul pulsante Installa certificato. Poiché questo certificato verrà utilizzato dal server e non da un utente specifico, modificare l’opzione in Macchina locale.

Importazione del certificato nell'archivio certificati macchina locale.
Importazione del certificato nell’archivio certificati macchina locale.

5. Continua attraverso il prompt lasciando tutto come predefinito. I valori predefiniti devono inserire il certificato nell’archivio Certificazioni root attendibili.

6. Ora ripetere i passaggi 3-5 per ciascuno degli altri certificati nell’elenco. Se si dispone di più di un certificato, assicurarsi che tutti gli altri certificati siano collocati nell’archivio Autorità di certificazione intermedie.

Creare e configurare il listener HTTPS WinRM

Ora che tutti i certificati sono installati, è il momento di configurare WinRM sul server per utilizzare tale certificato per il listener.

Con PowerShell aperto sul server WinRm:

  1. Eseguire il comando sottostante per impostare automaticamente il listener WinRm. Il comando winrm esegue questa operazione cercando nell’archivio certificati macchina locale un certificato che corrisponda ai requisiti per WinRM.
winrm quickconfig -transport:https

2. Il firewall di Windows bloccherà la porta HTTPS di WinRM 5986 per impostazione predefinita. Per garantire che il firewall consenta la porta in entrata 5986, eseguire il seguente comando PowerShell:

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam

Testare la connessione SSL WinRM

A questo punto, sei pronto per la connessione. Utilizzando i cmdlet PSRemoting preferiti come Invoke-Command o Enter-PSSession, connettersi al server e utilizzare il parametro UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)

Assicurarsi sempre che il valore del parametro ComputerName corrisponda esattamente al nome comune fornito durante la creazione del certificato. Se si tenta di connettersi a un altro nome host o forse all’indirizzo IP dell’host, verrà visualizzato un errore di mancata corrispondenza del certificato che causa un errore di connessione.

Impostazione dell’autenticazione basata su certificato

A questo punto, dovresti già avere un listener WinRM impostato per utilizzare HTTPS. In tal caso, è anche possibile utilizzare un certificato di autenticazione utente per autenticarsi come utente locale sul server remoto. L’utilizzo di un certificato utente è uno dei più sicuri, ma ci vuole un po ‘ per configurarlo. Scoprirai che è anche un sacco di lavoro ripetuto poiché ogni certificato è unico per la singola macchina client.

L’autenticazione basata su certificato funziona solo con account utente locali e non con utenti di dominio.

Supponendo di aver richiesto un certificato per l’autenticazione del client come descritto nella sezione Creazione della richiesta di certificato, continua a leggere:

Abilitazione dell’autenticazione del certificato e mappatura dell’utente sul server

  1. Sul server, eseguire il comando Set-Item per consentire l’autenticazione basata sul certificato.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true

2. Quindi, eseguire Get-ChildItem per esaminare l’archivio delle autorità di certificazione root attendibili per trovare l’impronta digitale della CA che ha emesso il certificato di autenticazione client. A tale scopo, filtrare i certificati in base al soggetto che contiene il nome della CA.

Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}

3. Eseguire il comando seguente in cui SubjectName è l’oggetto del certificato utente fornito durante la creazione del certificato

CAThumbprint è l’impronta digitale della CA raccolta con il comando precedente e quindi le credenziali richieste sono il nome utente e la password dell’utente locale che verrà utilizzato per l’autenticazione basata sul certificato.

New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)

Verifica dell’autenticazione basata su certificato

Ora che il mapping da certificato a utente è impostato, utilizzare il certificato sul computer client per autenticarsi senza fornire credenziali.

Sul client in PowerShell, ottenere l’impronta digitale del certificato client cercando nell’archivio certificati personali.

Get-ChildItem Cert:\CurrentUser\My

Ora specificare l’impronta digitale nel parametro CertificateThumbprint a un comando PSRemoting come di seguito.

Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>

Si noti che poiché l’autenticazione basata su certificato è utilizzabile solo con un listener HTTPS -UseSSL è implicita, a differenza di altri metodi di autenticazione in cui è necessario specificare per utilizzare SSL.

Ora che hai imparato come impostare WinRM su SSL, scopri di più su PSRemoting nel nostro PowerShell Remoting: The Ultimate Guide post!

Vuoi saperne di più su PowerShell in generale, tra cui molto su PSRemoting? Scopri PowerShell per amministratori di sistema, il libro!

Leave a Reply