Certificats SSL

Toutes les connexions utilisateurs passent par un service Traefik. L’infrastructure utilise des certificats SSL pour l’exposition du Portail à travers Traefik ainsi que pour les communications internes de la plateforme des différents services.

Important

Il est conseillé d’utiliser une PKI différente pour les communications internes de celle utilisée pour Traefik.

Traefik

Trois modes sont disponibles :

Certificat par défaut

Par défaut, un certificat autosigné est généré automatiquement lors de la création du conteneur Traefik. Ce mode est adapté pour des environnements de test, mais il n’est pas recommandé en production.

Certificat local

Vous pouvez fournir un certificat et une clé stockés sur la machine Ansible. Le rôle reemo-infra se charge de déployer ces fichiers sur les serveurs hébergeant Traefik.

Exemple d’inventaire :

TRAEFIK_SSL_CERTS:
    - cert_file: "/localpath/to/cert.crt"
      key_file: "/localpath/to/key.key"

Certificat déjà présent sur le serveur

Si les certificats sont déjà installés sur les serveurs cibles, vous pouvez indiquer leurs chemins locaux. Ils seront ensuite montés directement dans le conteneur Traefik.

Exemple d’inventaire :

TRAEFIK_SSL_CERTS_REMOTE:
    - cert_file_remotepath: "/remotepath/to/cert.crt"
      key_file_remotepath: "/remotepath/to/key.key"

Communication internes

L’ensemble des micro-services discute entre eux en mTLS imposant une gestion des certificats.
Vous avez 3 choix possibles:

PKI par défaut

Le rôle Ansible reemo-infra embarque une PKI dédiée complète et prête à l’emploi. Elle permet un déploiement simple avec des communications internes chiffrées et authentifiées.

CA générée automatiquement

Il est possible d’utiliser une autorité de certification (CA) générée automatiquement lors de l’exécution du rôle reemo-infra.

Étapes à suivre :

  1. Créer un répertoire local sur la machine Ansible, accessible en écriture par l’utilisateur exécutant Ansible.

  2. Ajouter dans le fichier d’inventaire les options nécessaires pour activer cette fonctionnalité.

all:
    vars:
        LOCAL_PATH: "/opt/reemo/ssl"
        INITCA_ENABLE: "true"
    infra_manager:
        hosts:
            infra_manager1:
                ansible_host: "10.0.0.1"
            infra_manager2:
                ansible_host: "10.0.0.2"
            infra_manager3:
                ansible_host: "10.0.0.3"

Lors du lancement du rôle, une CA sera créée automatiquement dans ce répertoire. Les clés et certificats associés seront ensuite exportés vers le cluster Docker Swarm sous forme de Secrets et montés dans les différents conteneurs qui en ont besoin.

Configuration manuelle

Il est aussi possible de générer soi-même les certificats SSL pour les URLs :

  • reemo_portal

  • reemo_portaladmin

  • reemo_api

  • reemo_proapi

  • reemo_signal

  • reemo_provision

  • reemo_prorelayapi

  • reemo_procloudapi

  • reemo_relayws

Il faut ensuite renseigner dans l’inventaire Ansible les chemins locaux des clés et certificats. Ils seront copiés automatiquement vers le cluster Docker Swarm par le rôle reemo-infra.

Exemple :

all:
    vars:
        API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
        ...
    infra_manager:
        hosts:
            infra_manager1:
                ansible_host: "10.0.0.1"
            infra_manager2:
                ansible_host: "10.0.0.2"
            infra_manager3:
                ansible_host: "10.0.0.3"
        vars:
            CA_SSL_CRT_LOCALPATH: "/local/path/ca.crt"
            API_SSL_CRT_LOCALPATH: "/local/path/reemo_api.crt"
            API_SSL_KEY_LOCALPATH: "/local/path/reemo_api.key"
            PROAPI_SSL_CRT_LOCALPATH: "/local/path/reemo_proapi.crt"
            PROAPI_SSL_KEY_LOCALPATH: "/local/path/reemo_proapi.key"
            PRORELAYAPI_SSL_CRT_LOCALPATH: "/local/path/reemo_prorelayapi.crt"
            PRORELAYAPI_SSL_KEY_LOCALPATH: "/local/path/reemo_prorelayapi.key"
            SIGNAL_SSL_CRT_LOCALPATH: "/local/path/reemo_signal.crt"
            SIGNAL_SSL_KEY_LOCALPATH: "/local/path/reemo_signal.key"
            PORTAL_SSL_CRT_LOCALPATH: "/local/path/reemo_portal.crt"
            PORTAL_SSL_KEY_LOCALPATH: "/local/path/reemo_portal.key"
            TRAEFIK_SSL_CERTS:
                - cert_file: "/local/path/domain.crt"
                  key_file: "/local/path/domain.key"