🔐 Ajouter un certificat CA personnalisĂ© dans Uptime Kuma sur Kubernetes

Introduction

Lorsque vous dĂ©ployez Uptime Kuma sur Kubernetes pour surveiller des services HTTPS internes, vous pouvez ĂȘtre confrontĂ© Ă  l’erreur suivante :

❌ unable to verify the first certificate

Cela se produit lorsque le conteneur ne parvient pas Ă  vĂ©rifier la chaĂźne de certification d’un certificat SSL, souvent parce qu’il s’agit d’un certificat interne non reconnu par les autoritĂ©s racines publiques.

Dans ce tutoriel, nous allons voir comment :

  • Ajouter un certificat CA interne dans Kubernetes via une ConfigMap
  • Le monter dans le conteneur d’Uptime Kuma
  • Configurer correctement NODE_EXTRA_CA_CERTS pour que Node.js le prenne en compte
  • VĂ©rifier que tout fonctionne ✅

📋 PrĂ©requis

  • Un cluster Kubernetes fonctionnel
  • Uptime Kuma dĂ©ployĂ© dans un namespace (ici monitoring)
  • Un certificat .crt, .pem ou .p7b contenant la chaĂźne CA
  • Un Ă©diteur YAML ou Helm, selon ta stack

đŸ§Ÿ Étape 1 — Extraire la chaĂźne de certificats depuis un fichier .p7b (facultatif)

Si ton fichier est au format .p7b (PKCS#7), tu peux l’extraire avec OpenSSL :

openssl pkcs7 -print_certs -in mon-certificat.p7b -out fullchain.pem

Le fichier fullchain.pem doit contenir :

  1. Le certificat intermédiaire
  2. Le certificat racine

⚠ Ne pas inclure le certificat serveur dans ce fichier.


📁 Étape 2 — CrĂ©er la ConfigMap contenant le certificat

Crée un fichier custom-ca-configmap.yaml :

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-ca-configmap
  namespace: monitoring
data:
  custom-ca.pem: |
    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkWgAwIBAgIQJ0bpn++M7LhCt20iYNFAlzANBgkqhkiG9w0BAQsFADBB
    ...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkWgAwIBAgIQJ0bpn++M7LhCt20iYNFAlzANBgkqhkiG9w0BAQsFADBB
    ...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkWgAwIBAgIQJ0bpn++M7LhCt20iYNFAlzANBgkqhkiG9w0BAQsFADBB
    ...
    -----END CERTIFICATE-----

💡 Assure-toi que le fichier est bien indentĂ©, sans caractĂšres spĂ©ciaux ou lignes corrompues.

Applique la ConfigMap :

kubectl apply -f custom-ca-configmap.yaml

đŸ§± Étape 3 — Monter le certificat dans le conteneur

Modifie le Deployment d’Uptime Kuma pour inclure le volume et la variable d’environnement NODE_EXTRA_CA_CERTS.

Extrait YAML :

        env:
        - name: NODE_EXTRA_CA_CERTS
          value: /etc/ssl/certs/custom-ca.pem

        volumeMounts:
        - name: custom-ca
          mountPath: /etc/ssl/certs/custom-ca.pem
          subPath: custom-ca.pem
          readOnly: true

      volumes:
      - name: custom-ca
        configMap:
          name: custom-ca-configmap

🔁 Étape 4 — RedĂ©marrer le dĂ©ploiement

Kubernetes ne recharge pas automatiquement les ConfigMap avec subPath. Il faut redémarrer le pod :

kubectl rollout restart deployment uptime-kuma -n monitoring

đŸ§Ș Étape 5 — VĂ©rification

  1. Connecte-toi à l’interface Uptime Kuma
  2. Ajoute ou édite une URL HTTPS interne de ton infrastructure, par exemple : https://service-interne.example.local/
  3. VĂ©rifie que l’erreur « unable to verify the first certificate Â» a disparu ✅

đŸ› ïž DĂ©pannage

📌 Fichier non trouvĂ© ?

Vérifie dans le pod :

kubectl exec -n monitoring <pod> -- ls -l /etc/ssl/certs/custom-ca.pem

📌 Certificat mal formatĂ© ?

Utilise openssl x509 pour valider :

openssl x509 -in fullchain.pem -noout -text

📈 RĂ©fĂ©rencement SEO : mots-clĂ©s utilisĂ©s

  • uptime kuma certificat interne
  • NODE_EXTRA_CA_CERTS Kubernetes
  • ajout CA Kubernetes
  • ConfigMap certificat TLS interne
  • unable to verify the first certificate Node.js

📩 Conclusion

Ajouter un certificat CA personnalisĂ© dans Uptime Kuma sur Kubernetes est simple une fois qu’on connaĂźt la bonne mĂ©thode : injecter la chaĂźne via une ConfigMap, la monter proprement dans le conteneur, et informer Node.js avec NODE_EXTRA_CA_CERTS.

Cela permet de surveiller des services HTTPS internes sans erreurs SSL, mĂȘme avec des certificats auto-signĂ©s ou dĂ©livrĂ©s par une autoritĂ© privĂ©e.