Configurer le développement Linux à distance sécurisé compatible FIPS

La prise en charge Linux est disponible dans Visual Studio 2017 et ultérieur. Le développement Linux à distance sécurisé compatible FIPS est disponible dans Visual Studio 2019 versions 16.5 et ultérieures.

La Publication FIPS (Federal Information Processing Standard) 140-2 est une norme du gouvernement des États-Unis applicable aux modules de chiffrement. Les implémentations de la norme sont validées par le National Institute of Standards and Technology (NIST). Windows a validé la prise en charge des modules de chiffrement conformes à la norme FIPS. Dans Visual Studio 2019 versions 16.5 et ultérieures, vous pouvez utiliser une connexion de chiffrement sécurisée compatible FIPS à votre système Linux pour le développement à distance.

Voici comment configurer une connexion sécurisée compatible FIPS entre Visual Studio et votre système Linux distant. Ce guide s’applique lorsque vous générez des projets CMake ou MSBuild Linux dans Visual Studio. Cet article est la version compatible FIPS des instructions de connexion données dans l’article Se connecter à un ordinateur Linux distant.

Préparer une connexion compatible FIPS

Une certaine préparation est requise pour utiliser une connexion SSH sécurisée par chiffrement compatible FIPS entre Visual Studio et votre système Linux distant. Pour se conformer à la norme FIPS-140-2, Visual Studio prend uniquement en charge les clés RSA.

Les exemples fournis dans cet article utilisent Ubuntu 18.04 LTS avec un serveur OpenSSH version 7.6. Toutefois, les instructions devraient être identiques pour toute distribution utilisant une version modérément récente d’OpenSSH.

Pour configurer le serveur SSH sur le système distant

  1. Sur le système Linux, installez et démarrez le serveur OpenSSH :

    sudo apt install openssh-server
    sudo service ssh start
    
  2. Si vous souhaitez que le serveur ssh démarre automatiquement lorsque le système démarre, activez-le à l’aide de systemctl :

    sudo systemctl enable ssh
    
  3. Ouvrez /etc/ssh/sshd_config en tant que racine. Modifiez les lignes suivantes (ou ajoutez-les, si elles n’existent pas) :

    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
    

    Notes

    ssh-rsa est le seul algorithme de clé d’hôte compatible FIPS pris en charge par Visual Studio. Les algorithmes aes*-ctr sont également compatibles FIPS, mais l’implémentation dans Visual Studio n’est pas approuvée. Les algorithmes ecdh-* d’échange de clés sont compatibles FIPS, mais Visual Studio ne les prend pas en charge.

    Vous n’êtes pas limité à ces options. Vous pouvez configurer ssh pour utiliser d’autres chiffrements, algorithmes de clé d’hôte, et ainsi de suite. D’autres options de sécurité pertinentes que vous pouvez envisager sont PermitRootLogin, PasswordAuthentication et PermitEmptyPasswords. Pour plus d’informations, consultez la page man pour sshd_config ou l’article Configuration du serveur SSH.

  4. Après avoir enregistré et fermé sshd_config, redémarrez le serveur ssh pour appliquer la nouvelle configuration :

    sudo service ssh restart
    

Vous allez créer une paire de clés RSA sur votre ordinateur Windows. Ensuite, vous allez copier la clé publique dans le système Linux distant que ssh doit utiliser.

Pour créer et utiliser un fichier de clé RSA

  1. Sur la machine Windows, générez une paire de clés RSA publique/privée à l’aide de la commande suivante :

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

    La commande crée une clé publique et une clé privée. Par défaut, les clés sont enregistrées dans %USERPROFILE%\.ssh\id_rsa et %USERPROFILE%\\.ssh\\id_rsa.pub. (Dans PowerShell, utilisez $env:USERPROFILE plutôt que la macro cmd %USERPROFILE%) Si vous modifiez le nom de la clé, utilisez le nom modifié dans les étapes qui suivent. Nous vous recommandons d’utiliser une phrase secrète pour renforcer la sécurité.

  2. À partir de Windows, copiez la clé publique sur la machine Linux :

    scp %USERPROFILE%\.ssh\id_rsa.pub user@hostname:
    
  3. Sur le système Linux, ajoutez la clé à la liste de clés autorisées (et vérifiez que le fichier dispose des autorisations appropriées) :

    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  4. À présent, vous pouvez tester pour voir si la nouvelle clé fonctionne dans ssh. Utilisez-la pour vous connecter à partir de Windows :

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

Vous avez correctement configuré ssh, créé et déployé des clés de chiffrement, et testé votre connexion. Vous êtes maintenant prêt à configurer la connexion Visual Studio.

Se connecter au système distant dans Visual Studio

  1. Dans Visual Studio, choisissez Outils > Options dans la barre de menus pour ouvrir la boîte de dialogue Options. Sélectionnez ensuite Multiplateforme > Gestionnaire des connexions pour ouvrir la boîte de dialogue Gestionnaire des connexions.

    Si vous n’avez pas encore configuré de connexion dans Visual Studio, lorsque vous générez votre projet pour la première fois, Visual Studio ouvre la boîte de dialogue Gestionnaire de connexions pour vous.

  2. Dans la boîte de dialogue Gestionnaire des connexions, choisissez le bouton Ajouter pour ajouter une nouvelle connexion.

    Capture d’écran montrant le volet options dans la boîte de dialogue du Gestionnaire des connexions. Cross Platform > C++> Connection Manager est mis en évidence.

    La fenêtre Se connecter au système distant s’affiche.

    Capture d’écran montrant la fenêtre Se connecter au système distant qui contient des zones de texte pour le nom d’hôte, le port, le nom d’utilisateur, le type d’authentification et le mot de passe.

  3. Dans la boîte de dialogue Se connecter au système distant , entrez les détails de connexion de votre ordinateur distant.

    Entrée Description
    Host Name Nom ou adresse IP de votre appareil cible
    Port Port sur lequel le service SSH est exécuté, en général 22
    Nom d'utilisateur Utilisateur sous le nom duquel s’authentifier
    Type d’authentification Choisir une Clé privée pour une connexion compatible FIPS
    Fichier de clé privée Fichier de clé privée créé pour la connexion ssh
    Phrase secrète Phrase secrète utilisée avec la clé privée sélectionnée ci-dessus

    Remplacez le type d’authentification par cléprivée. Entrez le chemin d’accès à votre clé privée dans le champ fichier de clé privée. À la place, vous pouvez utiliser le bouton Parcourir pour accéder à votre fichier de clé privée. Ensuite, dans le champ Phrase secrète, entrez la phrase secrète utilisée pour chiffrer votre fichier de clé privée.

  4. Cliquez sur le bouton Se connecter pour tenter une connexion à l’ordinateur distant.

    Si la connexion réussit, Visual Studio configure IntelliSense pour utiliser les en-têtes distants. Pour plus d’informations, consultez IntelliSense pour les en-têtes sur les systèmes distants.

    Si la connexion échoue, les zones des entrées qui doivent être modifiées seront surlignées en rouge.

    Capture d’écran de la fenêtre Connect to Remote System (Se connecter au système distant), avec les zones de texte du nom d’hôte et du port entourées de rouge pour indiquer qu’elles doivent être modifiées.

    Pour plus d’informations sur la résolution des problèmes de connexion, consultez Se connecter à votre ordinateur Linux distant.

Utilitaire de ligne de commande pour le Gestionnaire des connexions

Visual Studio 2019 version 16.5 ou ultérieure : ConnectionManager.exe est un utilitaire de ligne de commande pour gérer les connexions de développement à distance en dehors de Visual Studio. Il est utile pour des tâches telles que l’approvisionnement d’un nouvel ordinateur de développement. Vous pouvez également l’utiliser pour configurer Visual Studio pour l’intégration continue. Pour obtenir des exemples et une référence complète à la commande ConnectionManager, consultez Référence ConnectionManager.

Facultatif : Activer ou désactiver le mode FIPS

Il est possible d’activer le mode FIPS globalement dans Windows.

  1. Pour activer le mode FIPS, appuyez sur Windows+R pour ouvrir la boîte de dialogue Exécuter, puis exécutez gpedit.msc.

  2. Développez stratégie d’ordinateur local > Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Stratégies locales, puis sélectionnez Options de sécurité.

  3. Sous Stratégie, sélectionnez Chiffrement système : utilisez des algorithmes conformes aux normes FIPS pour le chiffrement, le hachage et les signatures., puis appuyez sur Entrée pour ouvrir sa boîte de dialogue.

  4. Sous l’onglet Paramètre local de sécurité, sélectionnez Activé ou Désactivé, puis choisissez OK pour enregistrer vos modifications.

Avertissement

L’activation du mode FIPS peut entraîner l’arrêt ou le comportement inattendu de certaines applications. Pour plus d’informations, consultez le billet de blog Why We’re Not Recommending "FIPS mode" Anymore.

Ressources supplémentaires

Documentation Microsoft sur la validation FIPS 140

FIPS 140-2: Security Requirements for Cryptographic Modules (de NIST)

Cryptographic Algorithm Validation Program: Validation Notes (de NIST)

Billet de blog Microsoft Why We’re Not Recommending "FIPS mode" Anymore

Configuration du serveur SSH

Voir aussi

Configurer un projet Linux
Configurer un projet CMake Linux
Se connecter à un ordinateur Linux distant
Déployer, exécuter et déboguer un projet Linux
Configurer des sessions de débogage CMake