Come appare il messaggio
Your connection is not private
Attackers might be trying to steal your information from cloud.example.com
NET::ERR_CERT_AUTHORITY_INVALIDCause frequenti
- Il certificato è autofirmato, ad esempio quello predefinito di un apparato, router o installazione appena fatta.
- È stato emesso da una CA interna il cui certificato radice non è installato sul client.
- Il server invia solo il certificato foglia senza l'intermedio, e il client non riesce a scaricarlo.
- Un proxy, antivirus o firewall rifirma il traffico HTTPS con una propria radice che il browser non conosce.
- Risponde il virtual host sbagliato, quindi viene servito un certificato predefinito al posto del tuo.
Verifica
- Chi ha emesso il certificato e per chi?
echo | openssl s_client -connect cloud.example.com:443 -servername cloud.example.com 2>/dev/null | openssl x509 -noout -subject -issuer - Com'è fatta la catena?
echo | openssl s_client -connect cloud.example.com:443 -servername cloud.example.com -showcerts 2>/dev/null | grep -E '^ *[0-9] s:|^ *i:' - Cosa dice la verifica di curl?
curl -vI https://cloud.example.com 2>&1 | grep -iE 'issuer|verify|SSL certificate' - Il nome SNI sceglie il certificato giusto?
echo | openssl s_client -connect cloud.example.com:443 -servername wrong.example.com 2>/dev/null | openssl x509 -noout -subject
Soluzione
- Se subject e issuer coincidono, il certificato è autofirmato. Per un host pubblico sostituiscilo con uno di una CA pubblica come Let's Encrypt.
- Per una CA interna installa la radice sui client. Su Debian e Ubuntu: copia il
.crtin/usr/local/share/ca-certificates/ed eseguisudo update-ca-certificates. Browser e telefoni vogliono la radice importata nel proprio archivio. - Servi la catena completa: in nginx
ssl_certificatedeve puntare afullchain.pem, non acert.pem. - Se un proxy rifirma il traffico, fidati della sua radice su quel dispositivo o escludi il sito dall'ispezione.
- Verifica che il
server_namegiusto abbia il certificato giusto, poi ricarica il web server.
Domande frequenti
È sicuro ignorare l'avviso?
Solo per un host che gestisci tu e riconosci, in una rete di cui ti fidi. Negli altri casi l'avviso serve a fermare un man-in-the-middle, quindi non accettarlo.
Perché funziona in un browser e in un altro no?
Browser e sistemi operativi hanno archivi di fiducia propri, e alcuni scaricano gli intermedi mancanti mentre altri no. Un intermedio mancante è una causa frequente quando falliscono solo alcuni client.