So stellen Sie ein verifiziertes Serverzertifikat für RDP-Verbindungen (Remotedesktop) zu Windows 10 bereit


15

In unserem Büro befindet sich ein Windows 10 Pro-Computer mit einem offenen Internetanschluss für eingehende Remotedesktopverbindungen (ein "Host"). Es ist durch ein komplexes Kennwort und eine begrenzte Anzahl zulässiger Versuche sowie nur TLS 1.1 oder höher gut geschützt, enthält jedoch kein extern verifiziertes SSL-Zertifikat, sondern nur das selbst generierte selbstsignierte Zertifikat, das von Remotedesktopdiensten bereitgestellt wird gibt uns zwei Probleme:

  1. Wir können nicht ganz sicher sein, wenn wir eine Remoteverbindung herstellen. Wir stellen tatsächlich eine Verbindung zu diesem Computer her und keine entführte Verbindung.
  2. Unsere Website besteht keine PCI-DSS 3.1-Konformitätsprüfung (erforderlich, da wir dort einen Debit- / Kreditkartenautomaten am Verkaufsort verwenden, der eine Verbindung über das Internet herstellt). Bei der Überprüfung werden schwerwiegende Fehler an diesem mit dem Internet verbundenen Remotedesktop-Port gemeldet: "Selbstsigniertes SSL-Zertifikat" und "SSL-Zertifikat mit falschem Hostnamen".

Wie kann ich einen Windows 10 Pro-Computer (oder Windows 7/8 / 8.1 Pro-Computer) als Server / Host dazu bringen, ein ordnungsgemäßes SSL-Zertifikat für die Remotedesktopüberprüfung vorzulegen?


1
Sie können entweder das selbstsignierte Zertifikat in den Zertifikatspeicher jedes Computers stellen, der eine Verbindung zu diesem Computer herstellt. Auf diese Weise wird nur dem selbstsignierten Zertifikat vertraut. Sie können das Zertifikat auch von einer Zertifizierungsstelle signieren lassen. Da die Zertifizierungsstelle vertrauenswürdig ist, wird dem Zertifikat, das der Host verwenden möchte, standardmäßig vertraut. Sie können Ihre PCI-DSS 3.1-Konformitätsprobleme nur lösen, wenn Sie ein von CA signiertes Zertifikat erhalten. Du solltest das tun.
Ramhound

Danke @Ramhound, Sie haben ganz recht, ich brauche ein CA-signiertes Zertifikat - ich habe jetzt eines.
Gogoud

Antworten:


16

Sie können diesen Host-Computer so einstellen, dass er Ihr (vorhandenes, erworbenes) extern verifiziertes SSL-Zertifikat verwendet und präsentiert (Anweisungen funktionieren wahrscheinlich auch für Windows 8 und 8.1, funktionieren möglicherweise nicht für Windows 7 oder nicht) (Teile davon basieren auf Microsoft KB 2001849 ):

Zunächst müssen Sie ein echtes verifiziertes SSL-Zertifikat erworben haben.

Wenn Sie dieses Zertifikat in einer Datei im Format pkcs12 (z. B. pfx-Erweiterung) haben, können Sie den SHA1-Fingerabdruck unter Linux oder Cygwin anzeigen (Sie benötigen ihn unten):

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

Alternativ, wenn Sie die einzelnen Zertifikatdateien auf Ihrem Linux-Server unter / etc / ssl (/etc/ssl/certs/mysite.crt, /etc/ssl/mysite.ca-bundle und /etc/ssl/private/mysite.key haben ) Sie können eine pfx-Datei erstellen und den SHA1-Fingerabdruck folgendermaßen erhalten:

  1. Erstellen Sie eine pfx-Datei für Ihr Zertifikat, falls Sie noch keine haben (hier: mysite.pfx) - legen Sie auf Anfrage ein gutes Passwort fest:

    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. Verschieben oder kopieren Sie diese pfx-Datei nach Bedarf, damit Ihr Windows-Hostcomputer darauf zugreifen kann.

  3. SHA1-Fingerabdruck des Schlüssels anzeigen (diesen benötigen Sie unten):

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

Importieren Sie die Datei im pkcs12-Format (z. B. pfx) in den persönlichen Zertifikatspeicher des Windows-Hostcomputers:

  1. Start> Ausführen> mmc
  2. Datei> Hinzufügen Snap-In entfernen> Zertifikate> Hinzufügen> Computerkonto> Lokaler Computer> OK
  3. Klicken Sie im linken Fenster mit der rechten Maustaste auf Zertifikate (lokaler Computer) Personal und wählen Sie Alle Aufgaben / Importieren….
  4. Suchen Sie die pfx-Datei und importieren Sie sie. Ich schlage vor, dass Sie sie aus Sicherheitsgründen nicht exportierbar machen.
  5. Wenn Sie Ihre persönlichen / Zertifikate erweitern, sollten jetzt 3 Zertifikate angezeigt werden, von denen eines Ihr Site-Zertifikat ist (z. B. mysite.com). Klicken Sie mit der rechten Maustaste auf dieses Site-Zertifikat und wählen Sie mit der rechten Maustaste Alle Aufgaben / Private Schlüssel verwalten…
  6. Fügen Sie den Benutzer 'NETWORK SERVICE' nur mit Leseberechtigung (nicht Vollzugriff) hinzu und klicken Sie dann auf Übernehmen
  7. Mmc schließen

Verwenden Sie regedit, um einen neuen Binärwert mit dem Namen SSLCertificateSHA1Hash at hinzuzufügen HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Der Wert, den es benötigt, ist der SHA1-Fingerabdruck des oben erhaltenen Zertifikats: Klicken Sie mit der rechten Maustaste auf den neuen Wert, wählen Sie Ändern und geben Sie die Hex-Codes nacheinander ein (ohne Doppelpunkte, Leerzeichen oder Kommas, Buchstaben unterscheiden nicht zwischen Groß- und Kleinschreibung) Insgesamt 20 Hex-Paare (40 Zeichen).

Möglicherweise müssen Sie den Hostcomputer neu starten oder die Remotedesktopdienste (über Services.msc) neu starten, bevor sie funktionieren.

Nachdem Sie eine Remotedesktopverbindung zu diesem Host unter Verwendung des richtigen Site-Namens (z. B. mysite.com) hergestellt haben, sollte auf der linken Seite der oberen Verbindungsleiste ein gesperrtes Vorhängeschloss angezeigt werden. Wenn Sie darauf klicken, wird die Identität der Remote angezeigt Computer wurde überprüft. Ein Port, der vom Internet bis zu diesem Host geöffnet ist, sollte jetzt das Testen des PCI-DSS 3.1-Hostnamens bestehen.


Ich möchte Sie ein paar tausend Mal positiv bewerten. Es funktioniert 100%
Shockwaver

9

Hier sind die grundlegenden Schritte, die ich verwende:

Holen Sie sich ein gültiges Zertifikat für den Host (es muss nicht von einer externen Zertifizierungsstelle stammen, aber alle Ihre Computer müssen ihm vertrauen). Stellen Sie sicher, dass es den richtigen Hostnamen hat. Ich hatte Probleme mit Platzhalterzertifikaten.

Installieren Sie das Zertifikat auf dem Host wie folgt:

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

Suchen Sie den Fingerabdruck für das Zertifikat entweder in der Benutzeroberfläche oder in PowerShell:

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

Weisen Sie Remotedesktop nun an, dieses Zertifikat zu verwenden:

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

Kein Neustart erforderlich


Mein Wildcard-SSL-Zertifikat hat einwandfrei funktioniert, aber ich musste immer noch MMC öffnen und die Netzwerkdienstberechtigung hinzufügen, sonst würde es nicht funktionieren.
FreeSoftwareServers

Ich konnte Platzhalterzertifikate sowohl unter "Windows 10" als auch unter "Windows Server 2016" importieren, mit dem Haken, dass Windows Server nicht über certutil.exe verfügt. Das ist keine große Sache, da Sie die Datei mycert.pfx manuell in den Cert Store importieren können. Ich musste MMC nicht öffnen und habe keine Netzwerkdienstberechtigung hinzugefügt.
TMT

1

Mein Zertifikat wird mit 2 benötigten Dateien geliefert, domain.crtund domain.ca-bundledann muss ich domain.keydie Anfrage generieren.

Hier ist, wie ich es mit einer Linux-VM einrichte, um die Zertifikate zu kombinieren und den Fingerabdruck und Windows CMD zu generieren, um den Host einzurichten. Dies ermöglicht eine vollständige Skripterstellung des Setups.

Die größten Unterschiede zwischen meiner und @gogoud Antwort sind:

  • Ich bearbeite die Registrierung nicht. Ich habe das versucht und es hat nicht funktioniert, ich benutze wmic /namespace:über CMD-Eingabeaufforderung.
  • Ich habe die Zeile "Fingerprint" auf der Linux-VM so angepasst, dass alle unnötigen Teile des Fingerabdrucks entfernt und in das von Windows gewünschte Format gebracht werden. (IE: Keine Doppelpunkte, keine Wörter, nur der Fingerabdruck mit Kleinbuchstaben).
  • Ich habe auch Skripte zum Hinzufügen von NETWORK SERVICEBerechtigungen geschrieben.

Erstellen Sie ein Verzeichnis, in dem Sie arbeiten können, und verschieben Sie die 3 Dateien in das Verzeichnis:

domain.ca-bundle  domain.crt  domain.key 

Pfx-Formatschlüssel erstellen:

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

Exportieren Sie SSLCertificateSHA1Hash / FingerPrint in die TXT-Datei:

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

Zertifikat nach Windows importieren (Open Elevated CMD Prompt):

  • Dies kann über den Schalter "-p MyPassword" weiter skriptiert werden.

    certutil.exe -importpfx C:\domain.pfx
    

Fügen Sie nun SSLCertificateSHA1Hash über CMD (Elevated CMD Prompt) zu RDP-Tcp hinzu:

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

Sie müssen jetzt den Benutzer "Netzwerkdienst" mit den Berechtigungen "Schreibgeschützt" hinzufügen:

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

Host neu starten:

 shutdown /r /t 5

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.