Jak zapewnić zweryfikowany certyfikat serwera dla połączeń pulpitu zdalnego (RDP) z Windows 10

15

W naszym biurze mamy maszynę z systemem Windows 10 Pro, która ma otwarty port do Internetu dla połączeń przychodzących na pulpicie zdalnym („host”). Jest dobrze chroniony złożonym hasłem i ograniczoną liczbą dozwolonych prób i tylko TLS 1.1 lub nowszy, ale nie przedstawia zewnętrznie zweryfikowanego certyfikatu SSL, tylko samodzielnie wygenerowany samopodpisany certyfikat usług pulpitu zdalnego, a to daje nam dwa problemy:

  1. Nie możemy być w pełni pewni, kiedy łączymy się zdalnie, tak naprawdę łączymy się z tym komputerem, a nie z jakimś porwanym połączeniem.
  2. Nasza strona nie przejdzie kontroli zgodności z PCI-DSS 3.1 (wymagana, ponieważ używamy tam maszyny do kart debetowych / kredytowych w punkcie sprzedaży, która łączy się przez Internet). Kontrola zgłasza krytyczne błędy na tym internetowym porcie zdalnego pulpitu: „Certyfikat SSL z podpisem własnym” i „Certyfikat SSL z nieprawidłową nazwą hosta”.

Jak uzyskać maszynę z systemem Windows 10 Pro (lub Windows 7/8 / 8.1 Pro) działającą jako serwer / host w celu przedstawienia odpowiedniego certyfikatu SSL do weryfikacji pulpitu zdalnego?

gogoud
źródło
1
Możesz albo umieścić samopodpisany certyfikat w magazynie certyfikatów każdego komputera, który połączy się z tym komputerem, w ten sposób zaufany będzie tylko samopodpisany certyfikat. Możesz także uzyskać certyfikat podpisany przez urząd certyfikacji i domyślnie, ponieważ urząd certyfikacji jest zaufany, certyfikat, którego host chce używać, będzie zaufany. Nie będziesz w stanie rozwiązać problemów związanych ze zgodnością PCI-DSS 3.1, dopóki nie otrzymasz certyfikatu podpisanego przez CA. Powinieneś to zrobić.
Ramhound
Dzięki @Ramhound, masz całkowitą rację, potrzebuję certyfikatu podpisanego przez urząd certyfikacji - teraz go mam.
gogoud
Powiązane -> serverfault.com/questions/444286/…
FreeSoftwareServers

Odpowiedzi:

16

Możesz ustawić tę maszynę hosta na używanie i prezentowanie (istniejącego, zakupionego) zewnętrznego certyfikatu SSL w ten sposób (instrukcje prawdopodobnie działają również w systemie Windows 8 i 8.1, mogą, ale nie muszą działać, w systemie Windows 7) (ich część oparta na systemie Microsoft KB 2001849 ):

Najpierw musisz kupić autentyczny zweryfikowany certyfikat ssl.

Jeśli posiadasz ten certyfikat w pliku w formacie pkcs12 (np. Rozszerzenie pfx), możesz wyświetlić odcisk palca SHA1 za pomocą Linuxa lub Cygwina (potrzebujesz go poniżej):

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

Alternatywnie, jeśli masz indywidualne pliki certyfikatów na serwerze Linux w / etc / ssl (/etc/ssl/certs/mysite.crt, /etc/ssl/mysite.ca-bundle i /etc/ssl/private/mysite.key ) możesz utworzyć plik pfx i uzyskać odcisk palca SHA1 w ten sposób:

  1. Utwórz plik pfx dla swojego certyfikatu, jeśli go jeszcze nie masz (tutaj: mysite.pfx) - ustaw dobre hasło na żądanie:

    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. Przenieś lub skopiuj ten plik pfx zgodnie z wymaganiami, aby był dostępny dla komputera z systemem Windows.

  3. Zobacz odcisk palca SHA1 klucza (będzie ci potrzebny poniżej):

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

Zaimportuj plik w formacie pkcs12 (np. Pfx) do osobistego magazynu certyfikatów komputera hosta Windows:

  1. Start> Uruchom> mmc
  2. Plik> Dodaj Usuń przystawkę> Certyfikaty> Dodaj> Konto komputera> Komputer lokalny> OK
  3. W oknie po lewej stronie kliknij prawym przyciskiem myszy Certyfikaty (komputer lokalny) Osobiste, wybierz Wszystkie zadania / Importuj…
  4. Zlokalizuj plik pfx i zaimportuj go, sugeruję, aby ze względów bezpieczeństwa nie zezwolić na eksport.
  5. Rozszerzając swoje osobiste / certyfikaty powinieneś teraz zobaczyć 3 certyfikaty, z których jeden jest certyfikatem witryny (np. Mysite.com). Kliknij ten certyfikat witryny prawym przyciskiem myszy i kliknij prawym przyciskiem myszy, wybierz Wszystkie zadania / Zarządzaj kluczami prywatnymi…
  6. Dodaj użytkownika „USŁUGA SIECIOWA” z uprawnieniem Tylko do odczytu (nie Pełna kontrola), a następnie Zastosuj
  7. Zamknij mmc

Użyj regedit, aby dodać nową wartość binarną o nazwie SSLCertificateSHA1Hash at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Potrzebna jest wartość odcisku palca SHA1 certyfikatu uzyskanego powyżej: kliknij prawym przyciskiem myszy nową wartość, wybierz polecenie Modyfikuj, a następnie wpisz kolejno kody szesnastkowe (bez dwukropków, spacji i przecinków, w literach nie jest rozróżniana wielkość liter) Łącznie 20 par heksadecymalnych (40 znaków).

Konieczne może być ponowne uruchomienie komputera hosta lub ponowne uruchomienie usług pulpitu zdalnego (z Services.msc), zanim zacznie działać.

Teraz po nawiązaniu połączenia pulpitu zdalnego z tym hostem przy użyciu poprawnej nazwy witryny (np. Mysite.com) powinieneś zobaczyć zamkniętą kłódkę po lewej stronie górnego paska połączenia: kliknięcie tego pokazuje, że tożsamość pilota komputer został zweryfikowany. Port, który jest otwarty z Internetu do tego hosta, powinien teraz przejść testowanie nazwy hosta PCI-DSS 3.1.

gogoud
źródło
Chciałbym cię głosować kilka tysięcy razy. Działa w 100%
Shockwaver
9

Oto podstawowe kroki, których używam:

Uzyskaj ważny certyfikat dla hosta (nie musi on pochodzić z zewnętrznego urzędu certyfikacji, ale wszystkie Twoje maszyny muszą mu ufać). Upewnij się, że ma prawidłową nazwę hosta, miałem problemy z certyfikatami symboli zastępczych.

Zainstaluj certyfikat na hoście, na przykład:

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

znajdź odcisk palca dla certyfikatu w interfejsie użytkownika lub w programie PowerShell:

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

teraz powiedz Pulpitowi zdalnemu, aby używał tego certyfikatu:

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

ponowne uruchomienie nie jest wymagane

Peter Hahndorf
źródło
Mój znak wieloznaczny SSL Cert działał dobrze, ale wciąż musiałem otworzyć MMC i dodać zezwolenie na usługę sieciową, inaczej nie zadziała.
FreeSoftwareServers
Byłem w stanie zaimportować certyfikaty wieloznaczne na „Windows 10”, a także „Windows Server 2016” z zastrzeżeniem, że Windows Server nie ma certutil.exe. To nie jest wielka sprawa, ponieważ możesz ręcznie zaimportować plik mycert.pfx do sklepu Cert. I nie trzeba otwierać MMC i nie Dodaj Permission usług sieciowych.
TMT
1

Mój cert wyposażony jest w 2 plikach potrzebnych domain.crt& domain.ca-bundle& następnie Mam domain.keyod generowania żądania.

Oto jak skonfigurowałem to za pomocą maszyny wirtualnej z systemem Linux, aby połączyć certyfikaty i wygenerować odcisk palca oraz CMD systemu Windows w celu skonfigurowania hosta. Umożliwia to pełne skryptowanie instalacji.

Największe różnice między moją a odpowiedzią @gogoud to:

  • Nie edytuję rejestru. Próbowałem tego i to nie działało, używam wmic /namespace:za pomocą zachęty CMD.
  • Dostosowałem linię „Odcisk palca” na maszynie Wirtualnej systemu Linux, aby usunąć wszystkie niepotrzebne części odcisku palca i ustawić go w formacie wymaganym przez system Windows. (IE: Bez dwukropków, bez słów, tylko odcisk palca z małymi literami).
  • Skryptowałem także dodawanie NETWORK SERVICEuprawnień.

Utwórz katalog do pracy i przenieś do niego 3 pliki:

domain.ca-bundle  domain.crt  domain.key 

Utwórz klucz w formacie pfx:

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

Wyeksportuj certyfikat SSLCSHA1Hash / FingerPrint do pliku TXT:

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

Importuj certyfikat do systemu Windows (monit o podniesione podniesione CMD):

  • Można to dalej wykonać za pomocą przełącznika „-p MojeHasło”

    certutil.exe -importpfx C:\domain.pfx
    

Teraz dodaj SSLCertificateSHA1Hash do RDP-Tcp za pomocą CMD (podwyższone zapytanie CMD):

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

Musisz teraz dodać uprawnienia użytkownika „Usługa sieciowa” z „Tylko do odczytu”:

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

Uruchom ponownie hosta:

 shutdown /r /t 5
FreeSoftwareServers
źródło