Come fornire un certificato server verificato per le connessioni Desktop remoto (RDP) a Windows 10


15

Abbiamo una macchina Windows 10 Pro nel nostro ufficio che ha una porta aperta su Internet per le connessioni desktop remoto in entrata (un 'host'). È ben protetto da password complesse e un numero limitato di tentativi consentiti e solo TLS 1.1 o versioni successive, ma non presenta un certificato SSL verificato esternamente, solo quello autofirmato autoprodotto fornito da Servizi Desktop remoto e questo ci dà due problemi:

  1. Non possiamo essere completamente sicuri quando ci connettiamo da remoto, ci stiamo davvero connettendo a questa macchina e non a una connessione dirottata.
  2. Il nostro sito non supera il controllo di conformità PCI-DSS 3.1 (richiesto perché utilizziamo lì un bancomat / carta di credito point-of-sale che si connette via Internet). Il controllo segnala errori irreversibili su questa porta desktop remota rivolta a Internet: "Certificato autofirmato SSL" e "Certificato SSL con nome host errato".

Come posso ottenere una macchina Windows 10 Pro (o Windows 7/8 / 8.1 Pro) che funge da server / host per presentare un certificato SSL adeguato per la verifica di Desktop remoto?


1
È possibile posizionare il certificato autofirmato nell'archivio certificati, di ogni macchina che si connetterà a questa macchina, in questo modo solo quel certificato autofirmato è attendibile. È inoltre possibile ottenere il certificato firmato da un'autorità di certificazione e per impostazione predefinita, poiché l'autorità di certificazione è attendibile, il certificato che l'host desidera utilizzare sarà considerato attendibile. Non sarà possibile risolvere i problemi di conformità PCI-DSS 3.1 se non si ottiene un certificato firmato da CA. Dovresti farlo.
Ramhound,

Grazie @Ramhound, hai perfettamente ragione, ho bisogno di un certificato firmato dalla CA - ora ne ho uno.
gogoud,

Risposte:


16

Puoi impostare questo computer host in modo che utilizzi e presenti il ​​tuo certificato SSL (esistente, acquistato) verificato esternamente (le istruzioni probabilmente funzionano anche per Windows 8 e 8.1, possono o meno funzionare per Windows 7) (parti di questo basate su una Microsoft KB 2001849 ):

Innanzitutto, è necessario aver acquistato un certificato SSL verificato autentico.

Se si dispone di questo certificato nel file di formato pkcs12 (ad es. Estensione pfx) è possibile visualizzare l'impronta digitale SHA1 utilizzando Linux o Cygwin (sarà necessario di seguito):

openssl pkcs12 -in mysite.pfx -nodes|openssl x509 -noout -fingerprint

In alternativa, se hai i singoli file di certificato nel tuo server Linux in / etc / ssl (/etc/ssl/certs/mysite.crt, /etc/ssl/mysite.ca-bundle e /etc/ssl/private/mysite.key ) è possibile creare il file pfx e ottenere l'impronta digitale SHA1 in questo modo:

  1. Crea il file pfx per il tuo certificato, se non ne hai già uno (qui: mysite.pfx) - imposta una buona password quando richiesto:

    sudo openssl pkcs12  -export -out mysite.pfx -inkey /etc/ssl/private/mysite.pem -in /etc/ssl/certs/mysite.crt -certfile /etc/ssl/mysite.ca-bundle
    
  2. Sposta o copia questo file pfx come richiesto in modo che sia accessibile dal tuo computer host Windows.

  3. Visualizza l'impronta digitale SHA1 della chiave (ti servirà di seguito):

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint

Importa file in formato pkcs12 (ad es. Pfx) nell'archivio certificati personali della macchina host Windows:

  1. Start> Esegui> mmc
  2. File> Aggiungi Rimuovi snap-in> Certificati> Aggiungi> Account computer> Computer locale> OK
  3. Nella finestra di sinistra, fai clic con il pulsante destro del mouse su Certificati (computer locale) Personale, scegli Tutte le attività / Importa ...
  4. Individua il file pfx e importalo, ti suggerisco di non renderlo esportabile per motivi di sicurezza.
  5. Espandendo il tuo personale / certificati ora dovresti vedere 3 certificati, uno dei quali è il tuo certificato del sito (ad esempio mysite.com). Fai clic con il pulsante destro del mouse su questo certificato del sito e fai clic con il pulsante destro del mouse, scegli Tutte le attività / Gestisci chiavi private ...
  6. Aggiungi l'utente "SERVIZIO DI RETE" solo con autorizzazione di lettura (non Controllo completo), quindi Applica
  7. Chiudi mmc

Utilizzare regedit per aggiungere un nuovo valore binario chiamato SSLCertificateSHA1Hash at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Il valore di cui ha bisogno è l'impronta digitale SHA1 del certificato ottenuto sopra: fai clic con il pulsante destro del mouse sul nuovo valore, scegli Modifica e digita i codici esadecimali in sequenza (senza due punti o spazi o virgole, le lettere non fanno distinzione tra maiuscole e minuscole) - ci sono 20 coppie esadecimali in totale (40 caratteri).

Potrebbe essere necessario riavviare il computer host o riavviare Servizi Desktop remoto (da Services.msc) prima che funzioni.

Ora, dopo aver effettuato una connessione desktop remoto a questo host utilizzando il nome del sito corretto (ad esempio mysite.com) dovresti vedere un lucchetto bloccato sul lato sinistro della barra di connessione superiore: facendo clic su questo si mostra che l'identità del telecomando il computer è stato verificato. Una porta aperta da Internet a questo host dovrebbe ora passare il test del nome host PCI-DSS 3.1.


Vorrei votarti alcune migliaia di volte. Funziona al 100%
Shockwaver

9

Ecco i passaggi di base che utilizzo:

Ottieni un certificato valido che per l'host (non deve provenire da una CA esterna, ma tutte le tue macchine devono fidarsene). Assicurati che abbia il nome host corretto, ho avuto problemi con i certificati jolly.

Installa il certificato sull'host, come:

certutil.exe -p myPassword -importPFX c:\mycert.pfx noExport

trova l'identificazione personale per il certificato, nell'interfaccia utente o in PowerShell:

$tp = (ls Cert:\LocalMachine\my | WHERE {$_.Subject -match "something unique in your certs subject field" } | Select -First 1).Thumbprint

ora dì a Desktop remoto di usare quel certificato:

& wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$tp" 

nessun riavvio richiesto


Il mio jolly SSL Cert ha funzionato bene, ma ho comunque dovuto aprire MMC e aggiungere l'autorizzazione al servizio di rete o non avrebbe funzionato.
FreeSoftwareServers

Sono stato in grado di importare certificati jolly su "Windows 10" e "Windows Server 2016" con una cattura che Windows Server non ha certutil.exe. Non è un grosso problema poiché puoi importare manualmente mycert.pfx nell'archivio certificati. Non ho dovuto aprire MMC e non ho aggiunto l'autorizzazione al servizio di rete.
TMT

1

Il mio cert viene fornito con 2 file necessari, domain.crte domain.ca-bundle& poi ho il mio domain.keydi generare la richiesta.

Ecco come l'ho configurato usando una VM Linux per combinare i certificati e generare l'impronta digitale e il CMD di Windows per configurare l'host. Ciò consente lo scripting completo dell'installazione.

Le maggiori differenze tra la mia e la risposta di @gogoud sono:

  • Non modifico il registro. L'ho provato e non ha funzionato, lo utilizzo wmic /namespace:tramite il prompt CMD.
  • Ho adattato la linea "Fingerprint" sulla macchina virtuale Linux per eliminare tutte le parti non necessarie dell'identificazione personale e metterlo nel formato desiderato da Windows. (IE: senza due punti, senza parole, solo l'impronta digitale con lettere minuscole).
  • Ho anche scritto le NETWORK SERVICEautorizzazioni per l' aggiunta .

Crea una directory su cui lavorare e sposta i 3 file in essa contenuti:

domain.ca-bundle  domain.crt  domain.key 

Crea chiave formato pfx:

sudo openssl pkcs12  -export -out domain.pfx -inkey *.key -in *.crt -certfile *.ca-bundle

Esporta SSLCertificateSHA1Hash / FingerPrint in file TXT:

sudo openssl x509 -in *.crt -noout -fingerprint | sed -e 's/SHA1 Fingerprint=//g' | sed -e 's/://g' | tr '[:upper:]' '[:lower:]' > SSLCertificateSHA1Hash.txt

Importa certificato in Windows (Apri prompt CMD elevato):

  • Questo può essere ulteriormente scritto tramite l'opzione "-p MyPassword"

    certutil.exe -importpfx C:\domain.pfx
    

Ora aggiungi SSLCertificateSHA1Hash a RDP-Tcp tramite CMD (prompt CMD elevato):

set /p FingerPrint=<C:\SSLCertificateSHA1Hash.txt
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"

Dovrai aggiungere l'utente "Servizio di rete" con le autorizzazioni "Sola lettura" ora:

icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R

Riavvia l'host:

 shutdown /r /t 5

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.