Activer le TLS pour les connexions sécurisées

Lorsque vous opérez dans un environnement de production, il est fortement recommandé d’activer la sécurité de couche de transport (TLS) pour chaque composant de Flower afin d’assurer une communication sécurisée.

Note

Pour des fins de test, vous pouvez générer vos propres certificats auto-signés. La page Enable SSL connections contient une section qui vous guidera à travers le processus.

Note

Lorsque vous travaillez avec Docker sur Linux, il peut être nécessaire de changer la propriété du répertoire contenant les certificats pour s’assurer d’un accès et des permissions corrects.

Par défaut, les conteneurs Flower s’exécutent avec un utilisateur non-root app. Les fichiers et dossiers montés doivent avoir les permissions appropriées pour l’ID d’utilisateur 49999.

Par exemple, pour changer l’ID d’utilisateur de tous les fichiers dans le dossier certificates/, vous pouvez exécuter sudo chown -R 49999:49999 certificates/*.

Si vous souhaitez plus tard supprimer le répertoire, vous pouvez changer l’ID d’utilisateur en cours à l’aide de sudo chown -R $USER:$(id -gn) certificates.

Par défaut, l’application ServerApp est exécutée en tant que sous-processus dans le conteneur Docker SuperLink, et l’application ClientApp est lancée en tant que sous-processus dans le conteneur Docker SuperNode. Vous pouvez en savoir plus sur les différents modes de processus ici : Exécuter ServerApp ou ClientApp en tant que Sous-Processus.

Pour activer TLS entre SuperLink et SuperNode, ainsi que entre SuperLink et flwr CLI, vous aurez besoin d’un certificat racine PEM codé, clé privée et chaîne de certificats.

SuperLink

En supposant que tous les fichiers dont nous avons besoin se trouvent dans le dossier local superlink-certificates, nous pouvons utiliser la bannière --volume pour monter les dossiers locaux dans le conteneur SuperLink:

$ docker run --rm \
    --volume ./superlink-certificates/:/app/certificates/:ro \
    <superlink-image> \
    --ssl-ca-certfile certificates/ca.crt \
    --ssl-certfile certificates/server.pem \
    --ssl-keyfile certificates/server.key \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • --volume ./superlink-certificates/:/app/certificates/:ro: Mount the superlink-certificates
    Répertoire dans le répertoire de travail actuel de la machine hôte en tant que volume lecture seule
    dans le dossier /app/certificates à l’intérieur du conteneur.

    Cela permet au conteneur d’accéder aux certificats TLS stockés dans les certificats
    répertoire.
  • <superlink-image>: Le nom de votre image SuperLink à exécuter.

  • --ssl-ca-certfile certificates/ca.crt: Spécifiez l’emplacement du fichier de certificat CA
    à l’intérieur du conteneur.

    Le fichier certificates/ca.crt est un certificat utilisé pour vérifier l’identité du
    SuperLink.
  • --ssl-certfile certificates/server.pem: Spécifiez l’emplacement des SuperLink’s
    Fichier de certificat TLS à l’intérieur du conteneur.

    Le fichier certificates/server.pem est utilisé pour identifier le SuperLink et chiffrer les
    Données transmises sur le réseau.
  • --ssl-keyfile certificates/server.key: Spécifiez l’emplacement du SuperLink’s
    Fichier de clé privée TLS à l’intérieur du conteneur.

    Le fichier certificates/server.key est utilisé pour décrypter les données transmises sur
    le réseau.

SuperNode

Note

Si vous génez des certificats auto-signés et que le fichier ca.crt n’existe pas sur le SuperNode, vous pouvez le copier après l’étape de génération.

$ docker run --rm \
    --volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro \
    <supernode-image> \
    --root-certificates ca.crt \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • --volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro: Mount the ca.crt
    fichier à partir du dossier superlink-certificates de la machine hôte en tant que lecteur uniquement
    volume dans le dossier /app/ca.crt à l’intérieur du conteneur.
  • <supernode-image>: Le nom de votre image SuperNode à exécuter.

  • --root-certificates ca.crt: Cela spécifie l’emplacement du fichier de certificat CA
    à l’intérieur du conteneur.

    Le fichier ca.crt est utilisé pour vérifier l’identité du SuperLink.

En mode d’isolement process, l’application ServerApp et ClientApp s’exécutent dans leurs propres processus. Contrairement au mode d’isolement subprocess, le SuperLink ou SuperNode ne tente pas de créer les processus respectifs; au lieu de cela, ils doivent être créés à l’extérieur.

Il est possible de lancer uniquement le SuperLink en mode d’isolement subprocess et le SuperNode en mode d’isolement process, ou vice versa, ou même les deux avec un mode d’isolement process.

SuperLink et ServerApp

Pour activer TLS entre SuperLink et SuperNode, ainsi que entre SuperLink et flwr CLI, vous aurez besoin d’un certificat racine PEM codé, clé privée et chaîne de certificats.

En supposant que tous les fichiers dont nous avons besoin se trouvent dans le répertoire local superlink-certificates, nous pouvons utiliser la flague --volume pour monter le répertoire local dans le conteneur SuperLink:

$ docker run --rm \
    --volume ./superlink-certificates/:/app/certificates/:ro \
    flwr/superlink:1.31.0 \
    --ssl-ca-certfile certificates/ca.crt \
    --ssl-certfile certificates/server.pem \
    --ssl-keyfile certificates/server.key \
    --isolation process \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • --volume ./superlink-certificates/:/app/certificates/:ro: Monter le
    superlink-certificates répertoire dans le répertoire de travail actuel du hôte
    machine en tant que volume lecture seule au répertoire /app/certificates à l’intérieur du conteneur.

    Cela permet au conteneur d’accéder aux certificats TLS stockés dans les certificats
    répertoire.
  • flwr/superlink:|stable_flwr_version| : nom de l’image à exécuter et version spécifique
    tag de l’image. Le tag |stable_flwr_version| représente une version spécifique de l’image.
  • --ssl-ca-certfile certificates/ca.crt: Spécifiez l’emplacement du fichier de certificat CA
    à l’intérieur du conteneur.

    Le fichier certificates/ca.crt est un certificat utilisé pour vérifier l’identité du
    SuperLink.
  • --ssl-certfile certificates/server.pem: Spécifiez l’emplacement des SuperLink’s
    Fichier de certificat TLS à l’intérieur du conteneur.

    Le fichier certificates/server.pem est utilisé pour identifier le SuperLink et chiffrer les
    Données transmises sur le réseau.
  • --ssl-keyfile certificates/server.key: Spécifiez l’emplacement du SuperLink’s
    Fichier de clé privée TLS à l’intérieur du conteneur.

    Le fichier certificates/server.key est utilisé pour décrypter les données transmises sur
    le réseau.
  • --isolation process: Dit au SuperLink que le ServerApp est créé séparément
    processus indépendant. Le SuperLink ne tente pas de le créer.

Lancer le conteneur ServerApp :

$ docker run --rm \
    <serverapp-image> \
    --insecure \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • <serverapp-image>: Le nom de votre image ServerApp à exécuter.

  • --insecure: Cette étiquette dit au conteneur d’opérer dans un mode non sécurisé, permettant
    communication non chiffrée. Les connexions sécurisées seront ajoutées dans les futures versions.

SuperNode et ClientApp

Note

Si vous génez des certificats auto-signés et que le fichier ca.crt n’existe pas sur le SuperNode, vous pouvez le copier après l’étape de génération.

Lancez le conteneur SuperNode :

$ docker run --rm \
    --volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro \
    flwr/supernode:1.31.0 \
    --root-certificates ca.crt \
    --isolation process \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • --volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro: Montez le fichier ca.crt depuis le
    répertoire superlink-certificates de la machine hôte, monté en volume en lecture seule sur /app/ca.crt
    répertoire à l’intérieur du conteneur.
  • flwr/supernode:|stable_flwr_version| : nom de l’image à exécuter et version spécifique
    tag de l’image. Le tag |stable_flwr_version| représente une version spécifique de l’image.
  • --root-certificates ca.crt: Cela spécifie l’emplacement du fichier de certificat CA
    à l’intérieur du conteneur.

    Le fichier ca.crt est utilisé pour vérifier l’identité du SuperLink.
  • --isolation process: Dit au SuperNode que le ClientApp est créé séparément
    processus indépendant. Le SuperNode ne tente pas de le créer.

Lancez le conteneur ClientApp :

$ docker run --rm \
    <clientapp-image> \
    --insecure \
    <additional-args>
Comprendre la commande
  • docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.

  • --rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.

  • <clientapp-image>: Le nom de votre ClientApp image à lancer.

  • --insecure: Cette étiquette dit au conteneur d’opérer dans un mode non sécurisé, permettant
    communication non chiffrée. Les connexions sécurisées seront ajoutées dans les futures versions.

Localisez le fichier de configuration Flower TOML sur votre machine.

$ flwr config list

Flower Config file: /path/to/.flwr/config.toml
SuperLink connections:
  supergrid
  local (default)

Ajoutez les lignes suivantes à la fin du fichier config.toml pour ajouter une nouvelle connexion SuperLink et la sauvegarder:

config.toml
[superlink.local-deployment-tls]
address = "127.0.0.1:9093"
root-certificates = "/absolute/path/to/superlink-certificates/ca.crt"

Note

Vous pouvez personnaliser la chaîne qui suit superlink. pour répondre à vos besoins. Cependant, veuillez noter que la chaîne ne peut pas contenir un point (.).

Dans cet exemple, local-deployment a été utilisé. N’oubliez simplement de remplacer local-deployment par votre nom choisi dans les deux chaînes superlink. et le commande correspondant flwr run .. Référez-vous au Flower Configuration pour plus d’informations.