Modifier le certificat TLS de Cyberwatch

Format requis pour le certificat et la clé

Le certificat et la clé doivent être au format PEM.

La clé doit être non chiffrée.

Ce format n’est qu’une convention de nommage, l’extension des fichiers du certificat et de la clé n’a pas de valeur technique réelle.

Cela indique que les fichiers attendus sont au format texte, avec le contenu du certificat encodé en base 64 entre les chaînes suivantes :

-----BEGIN CERTIFICATE-----
...certificat_encodé...
-----END CERTIFICATE-----

Avec Docker Swarm

  1. Copier le nouveau certificat dans le conteneur nginx :

    docker cp monfichier.crt $(docker ps -f name=cbwonpremise_nginx -q):/etc/nginx/ssl/nginx.crt
    docker cp monfichier.key $(docker ps -f name=cbwonpremise_nginx -q):/etc/nginx/ssl/nginx.key
    

    Le fichier nginx.crt contient le certificat, suivi si besoin des certificats intermédiaires. Il n’est pas nécessaire de modifier les permissions des fichiers car au démarrage, Cyberwatch les attribue à l’utilisateur du conteneur nginx et en limite l’accès.

  2. (Recommandé) Activer le header HSTS :

    L’activation du header HSTS est recommandée afin de renforcer la sécurité des connexions en forçant l’utilisation du protocole HTTPS.

    Ajouter la ligne suivante dans le fichier /etc/cyberwatch/containers.env :

    ENABLE_HSTS="true"
    
  3. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    
  4. Vérifier les fichiers vus par le conteneur nginx :

    sudo cyberwatch exec nginx ls -l /etc/nginx/ssl
    
    total 8
    -rw-------    1 nginx    nginx         1274 Oct  6 09:22 nginx.crt
    -rw-------    1 nginx    nginx         1705 Oct  6 09:22 nginx.key
    

Le certificat émis par Cyberwatch, utilisé par défaut, est renouvelé automatiquement au démarrage avant son expiration. En revanche, Cyberwatch ne remplace jamais un certificat qu’il n’a pas émis : un avertissement s’affiche au démarrage à l’approche de sa date d’expiration, il faut alors installer un nouveau certificat en suivant cette procédure.

Troubleshooting

Dans le cas où Cyberwatch ne redémarre pas, il est possible de consulter les logs du conteneur nginx avec la commande suivante :

sudo cyberwatch logs nginx -f

Dans le cas où un problème est survenu lors de l’ajout du nouveau certificat, une erreur devrait remonter dans ces logs.

Une mauvaise configuration du certificat peut provoquer un crash du conteneur nginx. Ce conteneur devant être démarré pour permettre la reconfiguration du certificat, il faut d’abord revenir à un certificat émis par Cyberwatch :

  1. Remplacer le certificat installé par un certificat émis par Cyberwatch :

    sudo cyberwatch renew-certificates --force nginx-ssl
    
  2. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    
  3. Configurer le certificat à nouveau, en suivant la procédure complète décrite ci-dessus

La commande cyberwatch renew-certificates est disponible à partir de la version 5.32 du socle.

Avec Kubernetes

  1. Prérequis : avoir lancé au moins une fois Cyberwatch
  2. Remplacer les fichiers nginx.crt et nginx.key respectivement par le certificat et la clé privée associée dans le dossier /var/lib/volumes/cyberwatch/ssl
  3. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    

Avec Podman

Cette procédure s’applique à partir de la version 1.4 du socle Podman, qui stocke le certificat présenté par l’interface web dans le dossier /etc/cyberwatch/ssl.

  1. Copier le nouveau certificat ainsi que la clé dans le dossier /etc/cyberwatch/ssl, en les attribuant à l’utilisateur cyberwatch qui exécute les conteneurs :

    sudo install -o cyberwatch -g cyberwatch -m 600 monfichier.crt /etc/cyberwatch/ssl/nginx.crt
    sudo install -o cyberwatch -g cyberwatch -m 600 monfichier.key /etc/cyberwatch/ssl/nginx.key
    

    Le fichier nginx.crt contient le certificat, suivi si besoin des certificats intermédiaires.

  2. (Recommandé) Activer le header HSTS en passant la variable ENABLE_HSTS à true dans le fichier /etc/cyberwatch/containers.env :

    ENABLE_HSTS='true'
    
  3. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    
  4. Vérifier le certificat présenté par l’interface web, sur le port 8443 par défaut :

    openssl s_client -connect localhost:8443 </dev/null 2>/dev/null | openssl x509 -noout -subject -enddate
    

Troubleshooting avec Podman

Dans le cas où Cyberwatch ne redémarre pas, une erreur liée au certificat devrait remonter dans les logs du conteneur nginx :

sudo cyberwatch logs nginx -f

Pour revenir à un certificat auto-signé, supprimer le certificat et la clé puis redémarrer Cyberwatch. Le conteneur nginx génère alors un nouveau certificat :

sudo rm /etc/cyberwatch/ssl/nginx.crt /etc/cyberwatch/ssl/nginx.key
sudo cyberwatch restart