Freigeben über


Einrichten einer FIPS-konformen sicheren Linux-Remoteentwicklung

Die Unterstützung für Linux ist in Visual Studio 2017 und höher verfügbar. Mit FIPS kompatible sichere Linux-Remoteentwicklung ist in Visual Studio 2019 (Version 16.5 oder höher) verfügbar.

Die FIPS-Veröffentlichung (Federal Information Processing Standard) 140-2 ist ein Standard der US-Regierung für kryptografische Module. Implementierungen des Standards werden von NIST überprüft. Windows verfügt über überprüfte Unterstützung für mit FIPS kompatible kryptografische Module. In Visual Studio 2019 (Version 16.5 oder höher) können Sie eine sichere, mit FIPS kompatible kryptografische Verbindung mit Ihrem Linux-System für Remoteentwicklung verwenden.

Im Folgenden wird erläutert, wie Sie eine sichere, mit FIPS kompatible Verbindung zwischen Visual Studio und Ihrem Linux-Remotesystem einrichten. Dieser Leitfaden ist anwendbar, wenn Sie CMake- oder MSBuild-Linux-Projekte in Visual Studio erstellen. Dieser Artikel handelt es sich um die mit FIPS kompatible Version der Verbindungsanweisungen unter Herstellen einer Verbindung mit Ihrem Linux-Remotecomputer.

Vorbereiten einer mit FIPS kompatiblen Verbindung

Einige Vorbereitungsschritte sind erforderlich, um eine mit FIPS kompatible, kryptografisch sichere SSH-Verbindung zwischen Visual Studio und Ihrem Linux-Remotesystem herzustellen. Für Kompatibilität mit FIPS-140-2 unterstützt Visual Studio nur RSA-Schlüssel.

In den Beispielen in diesem Artikel wird Ubuntu 18.04 LTS mit OpenSSH Server Version 7.6 verwendet. Allerdings sollten die Anweisungen für jede Distribution identisch sein, die eine moderate aktuelle Version von OpenSSH verwendet.

So richten Sie den SSH-Server auf dem Remotesystem ein

  1. Installieren und starten Sie auf dem Linux-System den OpenSSH-Server:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. Wenn Sie möchten, dass der ssh-Server beim Start des Systems automatisch gestartet wird, aktivieren Sie ihn mithilfe von systemctl:

    sudo systemctl enable ssh
    
  3. Öffnen Sie /etc/ssh/sshd_config als Root. Bearbeiten Sie die folgenden Zeilen, oder fügen Sie sie hinzu, sofern nicht vorhanden:

    Ciphers aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc
    HostKeyAlgorithms ssh-rsa
    KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
    MACs hmac-sha2-256,hmac-sha1
    

    Hinweis

    ssh-rsa ist der einzige mit FIPS kompatible Hostschlüsselalgorithmus, der von VS unterstützt wird. Die aes*-ctr-Algorithmen sind ebenfalls mit FIPS kompatibel, aber die Implementierung in Visual Studio ist nicht genehmigt. Die ecdh-*-Schlüsselaustauschalgorithmen sind mit FIPS kompatibel, werden aber in Visual Studio nicht unterstützt.

    Sie sind nicht auf diese Optionen beschränkt. Sie können ssh so konfigurieren, dass andere Verschlüsselungsverfahren, Hostschlüsselalgorithmen usw. verwendet werden. Einige andere relevante Sicherheitsoptionen, die Sie möglicherweise in Erwägung ziehen können, sind PermitRootLogin, PasswordAuthentication und PermitEmptyPasswords. Weitere Informationen finden Sie auf der Seite man zu sshd_config oder im Artikel Konfiguration des SSH-Servers.

  4. Starten Sie nach Speichern und Schließen von sshd_config den SSH-Server neu, um die neue Konfiguration zu übernehmen:

    sudo service ssh restart
    

Im nächsten Schritt erstellen Sie ein RSA-Schlüsselpaar auf Ihrem Windows-Computer. Anschließend kopieren Sie den öffentlichen Schlüssel zur Verwendung durch ssh auf das Linux-Remotesystem.

So erstellen und verwenden Sie eine RSA-Schlüsseldatei

  1. Generieren Sie auf dem Windows-Computer mit dem folgenden Befehl ein öffentliches/privates RSA-Schlüsselpaar:

    ssh-keygen -t rsa -b 4096 -m PEM
    

    Mit diesem Befehl wird ein öffentlicher und einer privater Schlüssel erstellt. Standardmäßig werden die Schlüssel in %USERPROFILE%\.ssh\id_rsa und %USERPROFILE%\\.ssh\\id_rsa.pub gespeichert. (Verwenden Sie in PowerShell $env:USERPROFILE anstelle des cmd-Makros %USERPROFILE%.) Wenn Sie den Schlüsselnamen ändern, verwenden Sie in den folgenden Schritten den geänderten Namen. Es wird empfohlen, eine Passphrase zu verwenden, um die Sicherheit zu erhöhen.

  2. Kopieren Sie den öffentlichen Schlüssel aus Windows auf den Linux-Computer:

    scp %USERPROFILE%\.ssh\id_rsa.pub user@hostname:
    
  3. Fügen Sie den Schlüssel auf dem Linux-System zur Liste der autorisierten Schlüssel hinzu, und stellen Sie sicher, dass die Datei die richtigen Berechtigungen besitzt:

    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  4. Nun können Sie testen, ob der neue Schlüssel in ssh funktioniert. Verwenden Sie ihn, um sich von Windows aus anzumelden:

    ssh -i %USERPROFILE%\.ssh\id_rsa user@hostname
    

Sie haben ssh erfolgreich eingerichtet, Verschlüsselungsschlüssel erstellt und bereitgestellt und die Verbindung getestet. Jetzt sind Sie bereit, die Visual Studio-Verbindung einzurichten.

Herstellen einer Verbindung mit dem Remotesystem in Visual Studio

  1. Klicken Sie in Visual Studio in der Menüleiste auf Extras > Optionen, um das Dialogfeld Optionen zu öffnen. Wählen Sie dann Plattformübergreifend > Verbindungs-Manager, um das Dialogfeld „Verbindungs-Manager“ zu öffnen.

    Wenn Sie zuvor noch keine Verbindung in Visual Studio eingerichtet haben, öffnet Visual Studio das Dialogfeld „Verbindungs-Manager“, wenn Sie das Projekt erstmals erstellen.

  2. Wählen Sie im Dialogfeld „Verbindungs-Manager“ die Schaltfläche Hinzufügen aus, um eine neue Verbindung hinzuzufügen.

    Screenshot des Bereichs „Optionen“ im Dialogfeld „Verbindungs-Manager“. „Plattformübergreifend“ > „C++“ > „Verbindungs-Manager“ ist hervorgehoben.

    Das Fenster Mit Remotesystem verbinden wird angezeigt.

    Screenshot des Fensters „Mit Remotesystem verbinden“ mit Textfeldern für Hostname, Port, Benutzername, Authentifizierungstyp und Kennwort

  3. Geben Sie im Dialogfeld Mit Remotesystem verbinden die Verbindungsdetails Ihres Remotecomputers ein.

    Eingabe Beschreibung
    Hostname Name oder IP-Adresse des Zielgeräts
    Port Port, auf dem der SSH-Dienst ausgeführt wird, in der Regel Port 22
    Benutzername Zu authentifizierender Benutzer
    Authentifizierungstyp Auswählen eines privaten Schlüssels für eine mit FIPS kompatible Verbindung
    Datei für den privaten Schlüssel Für die SSH-Verbindung erstellte private Schlüsseldatei
    Passphrase Passphrase mit dem zuvor ausgewählten privaten Schlüssel

    Ändern Sie den Authentifizierungstyp in Privater Schlüssel. Geben Sie den Pfad zu Ihrem privaten Schlüssel in das Feld Datei des privaten Schlüssels ein. Sie können die Schaltfläche Durchsuchen verwenden, um stattdessen zu Ihrer Datei mit dem privaten Schlüssel zu navigieren. Geben Sie dann die Passphrase in das Feld Passphrase ein, die verwendet wird, um die Datei mit dem privaten Schlüssel zu verschlüsseln.

  4. Klicken Sie auf die Schaltfläche Verbinden, um eine Verbindung mit dem Remotecomputer herzustellen.

    Wenn die Verbindung erfolgreich hergestellt wird, konfiguriert Visual Studio IntelliSense für die Verwendung der Remoteheader. Weitere Informationen finden Sie unter IntelliSense für Header auf Remotesystemen.

    Wenn die Verbindung nicht erfolgreich hergestellt wird, werden die Eintragsfelder, die geändert werden müssen, rot umrandet.

    Screenshot des Fensters „Mit Remotesystem verbinden“ mit rot umrandeten Textfeldern für Hostname und Port, um anzuzeigen, dass sie geändert werden müssen

    Weitere Informationen zur Problembehandlung der Verbindung finden Sie unter Herstellen einer Verbindung mit Ihrem Linux-Remotecomputer.

Befehlszeilenhilfsprogramm für den Verbindungs-Manager

Visual Studio 2019, Version 16.5 oder höher: ConnectionManager.exe ist ein Befehlszeilenhilfsprogramm zum Verwalten von Remoteentwicklungsverbindungen außerhalb von Visual Studio. Es ist gut für Aufgaben wie die Bereitstellung eines neuen Entwicklungscomputers geeignet. Sie können es auch zum Einrichten von Visual Studio für Continuous Integration verwenden. Beispiele für den und eine umfassende Referenz zum ConnectionManager-Befehl finden Sie unter ConnectionManager-Referenz.

Optional: Aktivieren oder Deaktivieren des FIPS-Modus

Es ist möglich, den FIPS-Modus in Windows global zu aktivieren.

  1. Um den FIPS-Modus zu aktivieren, drücken Sie WINDOWS+R, um das Dialogfeld Ausführen zu öffnen, und führen Sie dann gpedit.msc aus.

  2. Erweitern Sie Lokale Computerrichtlinie > Computerkonfiguration > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien, und wählen Sie dann Sicherheitsoptionen aus.

  3. Wählen Sie unter Richtlinie die Option Systemkryptografie: Mit FIPS kompatiblen Algorithmus für Verschlüsselung, Hashing und Signieren verwenden aus, und drücken Sie dann die EINGABETASTE, um das entsprechende Dialogfeld zu öffnen.

  4. Wählen Sie auf der Registerkarte Lokale Sicherheitseinstellung die Option Aktiviert oder Deaktiviert aus, und wählen Sie dann OK aus, um die Änderungen zu speichern.

Warnung

Das Aktivieren des FIPS-Modus kann dazu führen, dass einige Anwendungen nicht mehr funktionieren oder sich unerwartet verhalten. Weitere Informationen finden Sie im Blogbeitrag Why We’re Not Recommending „FIPS mode“ Anymore (Warum wir den „FIPS-Modus“ nicht mehr empfehlen).

Zusätzliche Ressourcen

Microsoft-Dokumentation zur FIPS 140-Überprüfung

FIPS 140-2: Security Requirements for Cryptographic Modules (FIPS 140-2: Sicherheitsanforderungen für Kryptografiemodule) (von NIST)

Cryptographic Algorithm Validation Program: Validation Notes(Kryptografiealgorithmus-Validierungsprogramm: Validierungshinweise) (von NIST)

Microsoft-Blogbeitrag zu Why We’re Not Recommending „FIPS mode“ Anymore (Warum wir den „FIPS-Modus“ nicht mehr empfehlen)

Konfiguration des SSH-Servers

Weitere Informationen

Konfigurieren eines Linux-Projekts
Konfigurieren eines Linux CMake-Projekts
Herstellen einer Verbindung mit Ihrem Linux-Remotecomputer
Bereitstellen, Ausführen und Debuggen Ihres Linux-Projekts
Konfigurieren von CMake-Debugsitzungen