Se stai già eseguendo comandi remoti con PowerShell Remoting (PSRemoting), sai già quanto sia conveniente questa funzione. Sei in grado di connetterti a uno o più computer remoti e gestirli come se fossero locali. PSRemoting si basa su Windows Remote Management (WinRm) per funzionare e, se non stai utilizzando WinRM su SSL, potresti esporti a problemi di sicurezza.
In questo tutorial pratico, imparerai come configurare Windows sul client e sul server per utilizzare WinRM su HTTPS (SSL) e come utilizzare i certificati per autenticarti quando usi WinRM su HTTPS.
Prerequisiti
Se desideri seguire questo tutorial, assicurati di avere quanto segue:
- 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.
- Accesso a un account amministrativo locale o a un account con diritti amministrativi locali su entrambe le macchine client e server.
- Un Active Directory Certificate Services (ADCS) Public Key Infrastructure (PKI) configurato. Sarebbe utile se avessi implementato ADCS per le implementazioni di produzione, ma è opzionale per questo tutorial e per i test. Il tutorial presupporrà che la PKI sia configurata come CA aziendale o autonoma.
Perché utilizzare WinRM su SSL?
PSRemoting, di default, 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 configurazione per implementare PSRemoting senza HTTPS è piuttosto semplice.
Se PSRemoting crittografa già le comunicazioni di sessione, perché complicarsi con la configurazione di qualcosa come ADCS e la gestione dei 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 è utilizzare WinRM su HTTPS invece di HTTP. HTTPS racchiude l’intero flusso di connessione, inclusa l’autenticazione, nel livello di crittografia già utilizzato da WinRM. HTTPS fornisce anche contemporaneamente un modo per convalidare che il server a cui ci si sta connettendo sia quello che si pensa.
Configurazione di WinRM con un certificato autogenerato
Ora passiamo alle dimostrazioni. Per il primo trucco, imparerai come configurare la crittografia delle comunicazioni PSRemoting con WinRm su SSL tramite un certificato autogenerato.
Utilizzare un certificato autofirmato è un ottimo modo per configurare un ambiente di test senza preoccuparsi di una infrastruttura di chiave pubblica (PKI) come ADCS. Quando si utilizza un certificato autofirmato, si genera un certificato che il server stesso firma, garantendo la propria identità.
I certificati servono principalmente a due scopi: autenticare una connessione e crittografarla. L’utilizzo di un certificato autofirmato implementa solo il secondo scopo. Per convalidare l’identità di un server, è sempre necessario utilizzare certificati forniti dalla PKI. I certificati forniti dalla PKI garantiscono una singola fonte di fiducia rispetto a dover fidarsi manualmente di ogni certificato autofirmato.
La configurazione di WinRM su SSL con un certificato autofirmato richiede quattro passaggi principali:
- Creazione del certificato autofirmato sulla macchina di destinazione.
- Configurazione del server Web WinRM (ascoltatore) per utilizzare il certificato autofirmato per l’autenticazione.
- Apertura delle porte appropriate nel firewall di Windows della macchina di destinazione.
- Esecuzione di un comando per avviare una connessione remota sul client utilizzando un cmdlet di PowerShell come
Enter-PSSession
.
Passiamo ora a ognuno dei passaggi.
Creazione di un certificato autofirmato
Il primo passo consiste nella generazione di un certificato autofirmato sul server. Durante la connessione, PSRemoting utilizzerà questo certificato per crittografare tutte le comunicazioni.
Mentre sei su ServerB con una console Windows PowerShell aperta come amministratore, esegui il cmdlet New-SelfSignedCertificate
come mostrato di seguito. L’esecuzione del comando seguente genera un certificato per ServerB.domain.com nel negozio di certificati personali della macchina locale.

Il parametro Subject
dovrebbe 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, fornisci sempre un nome di dominio, ad esempio, domain.com o lab.local. Quando ti connetti alla macchina di destinazione, il nome DNS a cui ti connetti deve corrispondere esattamente a questo nome soggetto, altrimenti la connessione fallirà.
Il parametro TextExtension
ti consente di definire l’uso chiave (2.5.29.37
) del certificato, che definisce per cosa il certificato può essere utilizzato. Definisci l’uso 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. Salvala perché ne avrai bisogno per il comando successivo.
Configurazione del listener WinRM
Una volta creato il certificato autofirmato sul server, configurare il listener WinRm per iniziare a utilizzare tale certificato per l’autenticazione. Per farlo, utilizzare il comando winrm create
come mostrato di seguito.
Il parametro Address=*
nel comando sottostante indica al listener di ascoltare su qualsiasi indirizzo IP configurato sul server. Se il server dispone di più indirizzi IP configurati, è possibile definire qui un indirizzo IP specifico.
Assicurarsi di sostituire il segnaposto
<impronta digitale del certificato>
con l’impronta digitale restituita nell’ultimo passaggio.

Apertura della porta del firewall SSL di WinRM
In seguito, se si utilizza il firewall di Windows, sarà necessario consentire il traffico HTTPS in ingresso al server sulla porta HTTPS predefinita 5986
.
Aprire la porta del firewall per WinRM tramite HTTPS utilizzando PowerShell eseguendo il comando di seguito.
Connessione al server tramite SSL
Ora hai configurato il server Windows remoto per accettare connessioni WinRM tramite SSL. A questo punto, torna al client e avvia eventuali comandi PSRemoting che desideri testare. Ad esempio, puoi provare il cmdlet Enter-PSSession
o Invoke-Command
. Tuttavia, la connessione sarà leggermente diversa rispetto alla connessione HTTP predefinita.
La connessione tramite HTTPS di solito richiede un singolo parametro UseSSL
. Questo parametro indica al comando di cercare un listener WinRM HTTPS invece di un listener HTTP come farebbe di default. Il parametro UseSSL
è disponibile su più comandi PSRemoting.
Per il testing, eseguire il comando Enter-PSSession
fornendo il FQDN del server come definito dal soggetto del certificato autofirmato, un oggetto PSCredential per definire il nome utente e la password, e infine, il parametro di commutazione UseSSL
.
Se si esegue il comando sopra riportato, si riceverà un messaggio di errore poiché si è configurato il listener WinRM sul server per utilizzare un certificato autofirmato. Ogni volta che il client PSRemoting tenta di autenticarsi al server, cercherà di convalidare il certificato e non ci riuscirà. Un certificato autofirmato non ha una catena di fiducia che il comando può seguire e fallisce.

Per connettersi al server con un certificato autofirmato, è necessario bypassare il controllo di affidabilità del certificato. Puoi farlo creando un’opzione di sessione chiamata SkipCACheck
utilizzando il cmdlet New-PSSessionOption
e passandola al comando come mostrato di seguito.
Puoi definire molti oggetti PSSessionOption diversi per aggiungere opzioni alla tua connessione remota che non sono incluse direttamente nel cmdlet
Enter-PSSession
.
Prova a connetterti nuovamente e PowerShell dovrebbe ora richiederti le credenziali. Una volta fornite, dovresti essere in grado di connetterti al server con WinRM su SSL!
Configurazione di WinRM con un certificato firmato da una CA
Se intendi utilizzare PSRemoting con WinRM in produzione e desideri mantenere il massimo livello di sicurezza possibile, devi concentrarti su WinRM su SSL utilizzando un certificato firmato da una autorità di certificazione (CA).
I certificati firmati da una CA mantengono una catena di fiducia e sono più sicuri dei semplici certificati autofirmati perché convalidano l’identità dell’emittente del certificato.
Se ti trovi in un ambiente Active Directory, uno dei modi più comuni per configurare una CA è tramite ADCS. Con ADCS, puoi distribuire certificati ai dispositivi e configurare WinRM per utilizzare quei certificati.
Questo tutorial presupporrà che tu abbia già configurato e funzionante ADCS nel tuo ambiente.
Per una configurazione rapida puoi seguire la documentazione di Microsoft, ma per una distribuzione in produzione, dovresti fare una ricerca approfondita sulla configurazione poiché un’autorità di certificazione è al centro degli sforzi di crittografia di un’organizzazione.
Creazione della richiesta di certificato
Il primo passaggio nell’utilizzo di un certificato emesso da un’AC è la creazione del certificato. Per creare il certificato, devi prima emettere una richiesta di certificato utilizzando una richiesta di firma del certificato (CSR). Una volta generato, questa CSR può quindi essere inviata all’AC per l’emissione del certificato.
I passaggi di questa sezione funzioneranno su distribuzioni ADCS quando si tratta di un’AC aziendale o di un’AC autonomo. Se stai utilizzando un’AC aziendale integrata in Active Directory, puoi accelerare l’iscrizione dei certificati senza passare attraverso i passaggi di questa sezione utilizzando l’auto-iscrizione dei certificati o i modelli di certificato.
Mentre sei sul server (ServerB in questo tutorial), crea il CSR:
- Esegui certlm.msc per aprire il Windows certificate manager.
2. Fai clic con il pulsante destro del mouse sull’archivio Personale e seleziona Tutte le attività —> Operazioni avanzate —> Crea richiesta personalizzata.
3. Per questo tutorial, lascia tutti i campi con i valori predefiniti fino a quando non arrivi alla pagina Informazioni sul certificato mostrata di seguito. Quando arrivi qui, fai clic sul menu a discesa Dettagli e seleziona Proprietà.

4. Fai clic sulla scheda Soggetto e cambia il Tipo in Nome comune.
5. Ora inserisci il nome di dominio completo del server se è collegato a un dominio o solo il nome dell’host se non lo è e fai clic su Aggiungi.

Nota che per l’uso con un listener SSL WinRM, è necessario utilizzare il nome comune. Le altre opzioni nell’elenco possono essere incluse ma non sono necessarie per questa configurazione.
6. Fai clic sulla scheda Estensione.
7. Se non stai utilizzando l’autenticazione basata su certificato, che verrà trattata successivamente, espandi l’intestazione uso esteso della chiave e aggiungi Autenticazione del server. Questo tipo di utilizzo della chiave indica a Windows che il certificato dovrebbe essere utilizzato per autenticare un server. Altre opzioni includono l’autenticazione del client, la firma del codice e la crittografia del documento.
8. Se desideri impostare l’autenticazione basata su certificato, assicurati di selezionare Autenticazione del client, come mostrato di seguito.

9. Successivamente, fai clic sulla scheda Chiave privata e osserva le Opzioni chiave. Modifica la dimensione predefinita della chiave da 1024 a almeno 2048 per aumentare la sicurezza della coppia di chiavi.
Sono disponibili anche provider crittografici più sicuri in Windows, ma potresti incontrare incompatibilità con software più vecchi.
10. Chiudi la finestra Proprietà del certificato e salva le impostazioni facendo clic su OK e poi su Avanti per continuare con le istruzioni.
11. Ora fornisci un percorso per salvare la richiesta del certificato in modo da poterla recuperare in seguito e fai clic su Fine.
Una volta completato, dovresti avere un file di richiesta del certificato.
Richiesta di un certificato
Una volta creata la richiesta, dovrai inviarla alla tua autorità di certificazione (CA), che genererà il certificato. Per farlo:
- Vai al tuo server ADCS su http://<nome server FQDN>/certsrv/certrqxt.asp.

2. Apri il file di richiesta del certificato creato in precedenza con il Blocco note e copia il testo dal file di richiesta del certificato nella casella di richiesta. Non è richiesto nulla per Attributi aggiuntivi per questo certificato.
3. Fai clic su Invia. In questo modo invierai la tua richiesta all’AC. Dovrebbe quindi mostrarti l’ID della richiesta, che sarà necessario successivamente. Salvalo! Ne avrai bisogno in seguito.
4. Ora connettiti al server CA che fa parte del tuo ambiente ADCS utilizzando il Gestore certificati di Windows sul tuo computer locale o tramite RDP eseguendo certsrv.msc.
5. Fai clic su Richieste in sospeso.

6. Fai clic con il pulsante destro del mouse sulla richiesta in sospeso, fai clic su Tutte le attività e fai clic su Emiti. In questo modo approverai la richiesta che hai appena inviato in base all’ID della richiesta dal passaggio precedente.
Registrazione del certificato
Ora che hai emesso un certificato sul CA, è il momento di registrarne uno sul server su cui stai configurando WinRM. Per farlo:
- Dal server su cui stai configurando WinRM su SSL, vai su http://<nome server FQDN>/certckpn.asp. Dovresti vedere una singola richiesta di certificato in sospeso.

Puoi recuperare il certificato pubblico da un’altra macchina se necessario, ma partire dal server su cui stai configurando WinRM su HTTPS semplifica il processo.
2. Seleziona la richiesta che hai inviato dalla lista e scarica la catena di certificati. Dovresti scaricare l’intera catena di certificati se il server su cui stai configurando WinRM tramite HTTPS ha la tua CA come server radice.

3. Apri il file della catena di certificati. Dovresti vedere un certificato per il tuo server e tutti i certificati dell’autorità di certificazione superiori nella catena. Sotto win2.lab.int si trova il certificato richiesto e WIN2-CA è il certificato dell’AC che ha emesso il certificato per win2.lab.int.

4. Fai doppio clic su uno dei certificati e nella finestra che si apre, fai clic sul pulsante Installa certificato. Poiché questo certificato sarà utilizzato dal server e non da un utente specifico, cambia l’opzione su Computer locale.

5. Continua attraverso il prompt lasciando tutto come predefinito. Le impostazioni predefinite dovrebbero posizionare il certificato nel Negozio di certificati radice attendibili.
6. Ora ripeti i passaggi 3-5 per ciascuno degli altri certificati nella lista. Se hai più di un certificato, assicurati che tutti gli altri certificati siano posizionati nel Negozio di autorità di certificazione intermedie.
Crea e configura il listener WinRM HTTPS
Ora che tutti i certificati sono installati, è il momento di configurare WinRM sul tuo server per utilizzare quel certificato per il listener.
Con PowerShell aperto sul server WinRM:
- Esegui il comando seguente per configurare automaticamente il listener di WinRm. Il comando
winrm
fa ciò cercando nel magazzino dei certificati della macchina locale un certificato che soddisfi i requisiti per WinRM.
2. Il firewall di Windows bloccherà la porta HTTPS di WinRM, 5986
, per impostazione predefinita. Per consentire al firewall l’apertura della porta in entrata 5986
, esegui il seguente comando PowerShell:
Prova la connessione SSL di WinRM
A questo punto, sei pronto per connetterti. Utilizzando i tuoi cmdlet preferiti di PSRemoting come Invoke-Command
o Enter-PSSession
, connettiti al server e utilizza il parametro UseSSL
.
Assicurati sempre che il valore del parametro
ComputerName
corrisponda esattamente al nome comune fornito durante la creazione del certificato. Se provi a connetterti a un nome host diverso o forse all’indirizzo IP dell’host, riceverai un errore di corrispondenza del certificato che provocherà un errore di connessione.
Configurazione dell’ Autenticazione basata su certificato
A questo punto, dovresti già avere un listener di WinRM configurato per utilizzare HTTPS. In tal caso, puoi anche utilizzare un certificato di autenticazione utente per autenticarti come utente locale sul server remoto. L’utilizzo di un certificato utente è uno dei metodi più sicuri, ma richiede del tempo per la configurazione. Troverai anche che si tratta di un lavoro ripetitivo in quanto ogni certificato è unico per la macchina client individuale.
L’autenticazione basata su certificato funziona solo con account utente locali e non con account di dominio.
Supponendo che tu abbia richiesto un certificato per l’autenticazione del client come descritto nella sezione Creazione della richiesta di certificato, continua a leggere:
Abilitazione dell’autenticazione basata su certificato e mappatura dell’utente sul server
- Sul server, esegui il comando
Set-Item
per consentire l’autenticazione basata su certificato.
Successivamente, esegui il comando Get-ChildItem
per esaminare lo store delle autorità di certificazione radice attendibili e trovare l’impronta digitale dell’AC che ha emesso il certificato di autenticazione del client. Per fare ciò, filtra i certificati in base al soggetto che contiene il nome della tua CA.
3. Esegui il seguente comando in cui SubjectName
è il soggetto del certificato utente che hai fornito durante la creazione del certificato
L’impronta digitale dell’AC (CAThumbprint
) è l’impronta digitale dell’AC raccolta con il comando precedente e quindi le credenziali richieste sono il nome utente e la password dell’utente locale che sarà utilizzato per l’autenticazione basata su certificato.
Test dell’autenticazione basata su certificato
Ora che la mappatura certificato/utente è configurata, utilizza il certificato sulla macchina client per autenticarti senza fornire credenziali.
Sul client in PowerShell, ottieni l’impronta digitale del certificato client cercando nell’archivio dei certificati personali.
Ora specifica l’impronta digitale nel parametro CertificateThumbprint
di un comando PSRemoting come nell’esempio seguente.
Nota che dato che l’autenticazione basata su certificato è utilizzabile solo con un listener HTTPS, l’opzione -UseSSL è implicita, a differenza degli altri metodi di autenticazione in cui è necessario specificare di utilizzare SSL.
Passaggi successivi
Ora che hai imparato come configurare WinRM su SSL, scopri di più su PSRemoting nel nostro post PowerShell Remoting: La guida definitiva!
Vuoi imparare di più su PowerShell in generale, compreso molto su PSRemoting? Dai un’occhiata al nostro libro PowerShell per gli amministratori di sistema!