Modificare il certificato TLS di Cyberwatch

Formato richiesto per il certificato e la chiave

Il certificato e la chiave devono essere in formato PEM.

La chiave non deve essere cifrata.

Questo formato è solo una convenzione di denominazione: l’estensione dei file del certificato e della chiave non ha un reale valore tecnico.

Indica che i file previsti sono in formato testo, con il contenuto del certificato codificato in base 64 tra le stringhe seguenti:

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

Con Docker Swarm

  1. Copiare il nuovo certificato nel container 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
    

    Il file nginx.crt contiene il certificato, seguito se necessario dai certificati intermedi. Non è necessario modificare i permessi dei file: all’avvio, Cyberwatch li assegna all’utente del container nginx e ne limita l’accesso.

  2. (Consigliato) Attivare l’header HSTS:

    Si consiglia di attivare l’header HSTS per rafforzare la sicurezza delle connessioni, imponendo l’utilizzo del protocollo HTTPS.

    Aggiungere la riga seguente nel file /etc/cyberwatch/containers.env:

    ENABLE_HSTS="true"
    
  3. Riavviare Cyberwatch:

    sudo cyberwatch restart
    
  4. Verificare i file visti dal container 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
    

Il certificato emesso da Cyberwatch, utilizzato per impostazione predefinita, viene rinnovato automaticamente all’avvio prima della scadenza. Cyberwatch, invece, non sostituisce mai un certificato che non ha emesso: all’avvicinarsi della data di scadenza viene visualizzato un avviso all’avvio, ed è quindi necessario installare un nuovo certificato seguendo questa procedura.

Troubleshooting

Nel caso in cui Cyberwatch non si riavvii, è possibile consultare i log del container nginx con il comando seguente:

sudo cyberwatch logs nginx -f

Se si è verificato un problema durante l’aggiunta del nuovo certificato, in questi log dovrebbe comparire un errore.

Una configurazione errata del certificato può provocare il crash del container nginx. Poiché questo container deve essere avviato per consentire la riconfigurazione del certificato, occorre prima tornare a un certificato emesso da Cyberwatch:

  1. Sostituire il certificato installato con un certificato emesso da Cyberwatch:

    sudo cyberwatch renew-certificates --force nginx-ssl
    
  2. Riavviare Cyberwatch:

    sudo cyberwatch restart
    
  3. Configurare nuovamente il certificato, seguendo la procedura completa descritta sopra

Il comando cyberwatch renew-certificates è disponibile a partire dalla versione 5.32 della piattaforma di base.

Con Kubernetes

  1. Prerequisito: aver avviato Cyberwatch almeno una volta
  2. Sostituire i file nginx.crt e nginx.key rispettivamente con il certificato e la chiave privata associata nella directory /var/lib/volumes/cyberwatch/ssl
  3. Riavviare Cyberwatch:

    sudo cyberwatch restart
    

Con Podman

Questa procedura si applica a partire dalla versione 1.4 della piattaforma di base Podman, che memorizza il certificato presentato dall’interfaccia web nella directory /etc/cyberwatch/ssl.

  1. Copiare il nuovo certificato e la chiave nella directory /etc/cyberwatch/ssl, assegnandoli all’utente cyberwatch che esegue i container:

    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
    

    Il file nginx.crt contiene il certificato, seguito se necessario dai certificati intermedi.

  2. (Consigliato) Attivare l’header HSTS impostando la variabile ENABLE_HSTS su true nel file /etc/cyberwatch/containers.env:

    ENABLE_HSTS='true'
    
  3. Riavviare Cyberwatch:

    sudo cyberwatch restart
    
  4. Verificare il certificato presentato dall’interfaccia web, sulla porta 8443 per impostazione predefinita:

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

Troubleshooting con Podman

Nel caso in cui Cyberwatch non si riavvii, nei log del container nginx dovrebbe comparire un errore relativo al certificato:

sudo cyberwatch logs nginx -f

Per tornare a un certificato autofirmato, eliminare il certificato e la chiave, quindi riavviare Cyberwatch. Il container nginx genera allora un nuovo certificato:

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