Certificato SSL per server di desktop remoto

Stanchi del solito errore quando vi collegate al vostro server RDP?
Assegnategli un certificato SSL con Powershell in un attimo!

Quando ci si collega ad un server RDP spesso si ottiene un errore dovuto alla mancanza di un certificato digitale corrispondente al nome dell’host

Se state provando a collegarvi a “computer.remoto.it” ed il server non ha il relativo certificato, infatti, otterrete quest’errore.

RDPcerterr

Una volta ottenuto dal vostro provider il certificato SSL in formato PFX (serve un certificato con la chiave privata!) andrà importato nella cartella Personale dei certificati del computer.

Aprite certlm.msc (o in mancanza aprite la console MMC ed aggiungete lo snap-in certificati per l’account del computer/computer locale), ed importate nella cartella Personale->Certificati il vostro nuovo certificato. Per fare ciò basterà cliccare col pulsante destro sulla suddetta cartella Certificati e selezionare Tutte le attività->Importa…
E’ importante che il file sia PFX perchè è necessario importare anche la relativa chiave privata.

Ora da Powershell potremmo vedere il suddetto certificato. Proviamo a verificare il certificato appena inserito col comando seguente

Get-ChildItem -path cert:/LocalMachine/My | Where-Object {$_.HasPrivateKey}| Sort-Object NotBefore| Format-List subject,friendlyname,certificatedomains,not*,thumbprint

Otterrete una lista di certificati tra cui quello appena caricato:

...
Subject : CN=computer.remoto.it
FriendlyName :
NotAfter : 23/05/2022 01:59:59
NotBefore : 19/05/2021 02:00:00
Thumbprint : 750DEE0A9F8F833E1AEBDD09648B785CEC1F19
...

A questo punto abbiamo certezza della presenza del certificato da noi previsto e bisognerà selezionare quello che ci interessa, usando il seguente comando:

$Tab = [char]9
$options=Get-ChildItem -path cert:/LocalMachine/my | Where-Object {$_.hasPrivateKey}| Sort-Object Subject,NotAfter | Select-Object DNSNameList,Subject,FriendlyName,Issuer,NotAfter,Thumbprint
$Title = "Scegli certificato"
$Info = "Seleziona il certificato da utilizzare"
$defaultchoice = 0
$numeratore=0
$options|foreach {$numeratore++;write ($numeratore.tostring() +')'+$Tab+'Scad.'+$_.NotAfter.ToString("yyyyMMdd")+' '+$_.DNSNameList +' - '+$_.Issuer)}
$optionsNumber=1..($options.count)
$selected =  $host.UI.PromptForChoice($Title , $Info , $OptionsNumber, $defaultchoice)
Write-Host "Hai scelto il seguente certificato"
Write-Host "----------------------------------"
$options[$selected]
Read-Host "Premi [Invio] per continuare o [Ctrl-C] per interrompere"
$TSgs = Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
$RDPcert=Set-WmiInstance -Path $TSgs.__PATH -argument @{SSLCertificateSHA1Hash=$options[$selected].ThumbPrint}
Write-Host "Configurazione inviata. Il certificato RDP è impostato su:" $RDPcert.certificateName

Se tutto è andato bene ora connettendovi non otterete più alcun avviso.

Lascia un commento qui