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