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
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.keyLe fichier
nginx.crtcontient 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.(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"Redémarrer Cyberwatch :
sudo cyberwatch restartVérifier les fichiers vus par le conteneur nginx :
sudo cyberwatch exec nginx ls -l /etc/nginx/ssltotal 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 :
Remplacer le certificat installé par un certificat émis par Cyberwatch :
sudo cyberwatch renew-certificates --force nginx-sslRedémarrer Cyberwatch :
sudo cyberwatch restartConfigurer 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
- Prérequis : avoir lancé au moins une fois Cyberwatch
- Remplacer les fichiers
nginx.crtetnginx.keyrespectivement par le certificat et la clé privée associée dans le dossier/var/lib/volumes/cyberwatch/ssl 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.
Copier le nouveau certificat ainsi que la clé dans le dossier
/etc/cyberwatch/ssl, en les attribuant à l’utilisateurcyberwatchqui 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.keyLe fichier
nginx.crtcontient le certificat, suivi si besoin des certificats intermédiaires.(Recommandé) Activer le header HSTS en passant la variable
ENABLE_HSTSàtruedans le fichier/etc/cyberwatch/containers.env:ENABLE_HSTS='true'Redémarrer Cyberwatch :
sudo cyberwatch restartVérifier le certificat présenté par l’interface web, sur le port
8443par 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