Aller au contenu principal

Canal de contrôle et épinglage de la CA

Ce que fait le canal de contrôle​

Chaque agent garde une connexion sortante ouverte vers le serveur BaaStide. Cette connexion est le canal de contrôle. Elle porte les ordres de la plateforme et les événements des tâches. Elle ne porte pas les données de sauvegarde.

L'agent ouvre cette connexion en HTTPS, sur le port 443. Vous n'ouvrez aucun port entrant sur la machine. Voir Avant d'installer.

Sur ce canal, l'agent ne vérifie pas seulement le certificat du serveur. Il vérifie aussi que la chaîne de ce certificat porte une empreinte d'autorité de certification connue. C'est l'épinglage de la CA, le nom court de l'autorité de certification. Un serveur dont la chaîne ne porte aucune empreinte connue est refusé, même avec un certificat valide.

Prérequis​

  • Aucun rôle du portail. Cette page explique un comportement du produit.
  • Pour lire les empreintes d'une machine : un accès root sur une machine Linux, ou un compte administrateur local sur une machine Windows.
  • Pour relever l'empreinte d'une instance installée chez vous : un accès au serveur de l'instance, et openssl sur votre poste ou sur ce serveur.

Comment l'agent vérifie le serveur​

Une empreinte est la somme SHA-256 du certificat de l'autorité de certification, au format DER. Elle s'écrit en 64 caractères hexadécimaux en minuscules. L'agent garde de 1 à 4 empreintes : l'autorité en service, plus la suivante pendant un changement.

L'agent accepte la connexion dans deux cas :

  • la chaîne du serveur est validée par les autorités de certification du système, et un certificat de cette chaîne porte une des empreintes ;
  • le serveur envoie l'autorité épinglée dans sa chaîne, et son certificat est validé par cette seule autorité. Ce cas couvre une autorité privée, absente du magasin du système.

Sinon l'agent refuse la connexion, puis il réessaie.

L'épinglage ne couvre pas tous les canaux de l'agent :

CanalCe que l'agent vérifie
Canal de contrôleLe certificat du serveur, et une empreinte d'autorité de certification.
Enrôlement sur le service BaaStide en ligneLe certificat du serveur, et une empreinte compilée dans l'agent.
Enrôlement sur une instance installée chez vous (--server)Le certificat du serveur seulement.
Envoi et lecture des données de sauvegardeLe certificat du serveur seulement.
Téléchargement d'une nouvelle version de l'agentLe certificat du serveur, la taille, l'empreinte SHA-256 et la signature de la version. Voir Mise à jour automatique de l'agent.
Média de restauration bare metalLe certificat du serveur, et l'empreinte que vous saisissez au démarrage. Voir Préparer le média de restauration.

Où l'agent garde les empreintes​

L'agent garde les empreintes dans son fichier d'identité, sous la clé ca_fingerprints :

SystèmeFichier de l'identité
Linux/etc/baastide/agent.conf
Windows%ProgramData%\BaaStide\agent.conf

L'agent choisit les empreintes dans cet ordre :

  1. Les empreintes du fichier d'identité, quand il en porte.
  2. Sinon, les empreintes compilées dans le programme. Elles couvrent le service BaaStide en ligne.
  3. Sinon, aucune empreinte. L'agent fait alors la vérification TLS habituelle, sans épinglage.

L'agent reçoit ses empreintes à son enrôlement :

  • Sur le service BaaStide en ligne, les empreintes compilées protègent déjà l'enrôlement lui-même.
  • Sur une instance installée chez vous, le premier contact est protégé par TLS seul. Le serveur donne ensuite ses empreintes, et l'agent les écrit dans son fichier d'identité. Vérifiez l'adresse et le réseau avant cet enrôlement. Voir Enrôler en ligne de commande.

La plateforme ne change les adresses et les empreintes d'un agent que par un ordre du serveur auquel cet agent est déjà rattaché. Un nouvel enrôlement remplace le fichier d'identité en entier, empreintes comprises. Voir Rattacher un agent.

Lire les empreintes d'une machine protégée​

Faites ce contrôle quand un agent reste Hors ligne après un changement de certificat.

  1. Ouvrez une session sur la machine.

  2. Lisez la clé ca_fingerprints du fichier d'identité.

    Sur Linux, en root :

    grep -A 5 '"ca_fingerprints"' /etc/baastide/agent.conf

    Sur Windows, dans un PowerShell administrateur :

    (Get-Content "$env:ProgramData\BaaStide\agent.conf" | ConvertFrom-Json).ca_fingerprints
  3. Comparez chaque valeur avec l'empreinte de votre autorité de certification. Voir « Relever l'empreinte d'une instance installée chez vous » plus bas.

Le fichier d'identité porte aussi le secret de l'agent. Lisez la seule clé ca_fingerprints. Ne copiez pas ce fichier, et ne le joignez pas à un ticket.

Relever l'empreinte d'une instance installée chez vous​

L'instance garde le certificat de son autorité de certification dans le fichier secrets/control-ca.pem de son dossier de déploiement. L'empreinte de ce certificat est l'empreinte que les agents épinglent.

  1. Ouvrez une session sur le serveur de l'instance.

  2. Allez dans le dossier de déploiement de l'instance.

  3. Calculez l'empreinte :

    openssl x509 -in secrets/control-ca.pem -outform der | sha256sum
  4. Lisez les 64 caractères hexadécimaux affichés. C'est l'empreinte à donner.

Cette commande lit le premier certificat du fichier. Quand le fichier porte deux certificats, séparez-les dans deux fichiers, puis relancez la commande sur chacun.

Donnez cette empreinte dans deux cas :

  • pour démarrer un média de restauration bare metal sur votre instance ;
  • pour vérifier les empreintes d'une machine protégée.

Changer l'autorité de certification d'une instance​

Un agent reçoit ses empreintes à son enrôlement. Cette version ne met pas à jour les empreintes d'un agent déjà enrôlé. Un changement d'autorité se fait donc en deux temps, avant que le certificat du serveur passe sous la nouvelle autorité.

  1. Mettez l'ancienne et la nouvelle autorité dans secrets/control-ca.pem, l'une après l'autre.
  2. Redémarrez le service api de l'instance. Il lit ce fichier à son démarrage.
  3. Enrôlez les nouvelles machines. Elles reçoivent les deux empreintes.
  4. Relevez les machines enrôlées avant l'étape 1. Elles n'ont que l'ancienne empreinte. Demandez au support BaaStide comment leur donner la nouvelle.
  5. Faites passer le certificat du serveur sous la nouvelle autorité.
  6. Retirez l'ancienne autorité de secrets/control-ca.pem, puis redémarrez le service api.

Une machine qui n'a que l'ancienne empreinte perd son canal de contrôle à l'étape 5. Elle reste Hors ligne. Traitez l'étape 4 avant l'étape 5.

Repérer un refus d'épinglage​

Un refus d'épinglage ne coupe pas l'agent de la machine. L'agent continue de réessayer, et la machine reste Hors ligne dans le portail.

Où regarderCe que vous lisez
Le portail, fiche de la machineL'état Hors ligne. Voir Parc et arborescence.
Les alertesL'alerte Agent hors ligne, après son seuil en heures. Voir Alertes.
Le journal de l'agent, sur la machineLa ligne control channel down, reconnecting, avec l'erreur control channel certificate is not issued by the pinned BaaStide CA. Sur Linux, le journal du système. Sur Windows, le fichier %ProgramData%\BaaStide\log\agent.log.

Une identité refusée par le serveur donne une autre ligne : agent identity refused (401); enroll this machine again with --force. La cause n'est alors pas l'épinglage. Voir Rattacher un agent.

Limites et précautions​

  • L'épinglage protège le canal de contrôle. Il ne protège ni l'envoi des données, ni le téléchargement d'une nouvelle version. Une nouvelle version reste protégée par sa signature.
  • Le premier contact d'un enrôlement sur une instance installée chez vous est protégé par TLS seul. Vérifiez l'adresse et le réseau avant cet enrôlement.
  • Les machines protégées doivent faire confiance à l'autorité de certification de votre instance, dans le magasin de leur système.
  • Un agent reçoit ses empreintes à son enrôlement. Cette version ne met pas à jour les empreintes d'un agent déjà enrôlé.
  • Un agent avec une mauvaise empreinte ne se répare pas tout seul. Demandez au support BaaStide.
  • BaaStide ne protège pas la machine contre son propre administrateur. Root sur Linux, et un administrateur local sur Windows, lisent et modifient le fichier d'identité. Voir Sécurité de BaaStide.
  • L'agent n'écoute aucun port du réseau. Son canal de restauration local n'accepte aucun client distant.
  • L'agent suit les variables HTTPS_PROXY et NO_PROXY de son service. Votre proxy doit laisser passer une connexion HTTPS longue vers le serveur BaaStide.
  • Le serveur envoie un ping toutes les 30 secondes. La plateforme déclare la machine hors ligne après trois pings sans réponse, donc après 90 secondes.
  • Après une coupure, l'agent attend entre 1 et 60 secondes, puis il réessaie. Le délai grandit à chaque échec, avec une part aléatoire.
  • La plateforme n'accepte aucun agent plus ancien que la version 0.6.1. Tous les agents acceptés lisent la liste des empreintes. Voir Versions d'agent minimales par fonction.
  • Le secret de l'agent part dans l'en-tête de la requête, jamais dans l'adresse. Une identité absente ou fausse reçoit une réponse 401.
  • Chaque ordre reçoit un accusé de réception, et chaque ordre porte un identifiant. Un ordre rejoué après une reconnexion n'est pas exécuté deux fois.

Référence​