Aggiornando un certificato SSL/TLS su un NetScaler, mi sono imbattuto in un problema: il nuovo certificato non veniva riconosciuto dal browser, con l’errore riportato in oggetto: nonostante avessi collegato il certificato all’intermediate, non veniva riconosciuto.
I certificati SSL/TLS sono una coppia di chiavi (pubblica e privata) che servono per stabilire una connessione cifrata e sicura tra client e server. La validità di un certificato è data dalla verifica del nome chiamato, dalla data di validità (inizio e fine) e dalla verifica della firma del certificato.
Tutti i sistemi operativi (e una serie di applicativi) hanno una serie di certificati pubblici di Certification Authority note considerate affidabili, tramite i quali è possibile verificare l’autenticità della firma del certificato. Tuttavia le Certification Authority solitamente firmano i certificati con una o più Intermediate CA (o Subordinate), anch’esse solitamente riconosciute dai nostri dispositivi: la firma del nostro certificato è confermata dalla chiave pubblica della Intermediate CA, che a sua volta è riconosciuta dalla chiave pubblica radice della Certification Authority.
Nell’installare i certificati è sempre buona norma installare anche i certificati di tutte le Intermediate CA coinvolte (che possono essere più di una), ma è pressoché inutile installare e collegare anche il certificato radice della Certification Authority, perché se non è considerato “affidabile” dal nostro sistema operativo o applicazione, la firma del nostro certificato non è comunque valida.
Torniamo al problema iniziale. Il mio certificato era in queste condizioni:

Il certificato GoDaddy TLS Intermediate CA DV - R1v1 è firmato direttamente dalla nuova radice GoDaddy TLS Root CA - R1 che deve essere già considerato affidabile.

Dallo screenshot sembra tutto ok, ma…. sono incappato in questo articolo: https://www.godaddy.com/it/help/perche-godaddy-sta-rimuovendo-leku-clientauth-e-sta-passando-alla-gerarchia-radice-r1-per-lemissione-di-tls-dv-42783
Per farla breve, GoDaddy sta cambiando la sua Root CA per adempiere ad alcuni requisiti di sicurezza sempre più stringenti. Per questo motivo i nuovi certificati sono firmati da una nuova “catena” indicata come R1, che però potrebbe non essere ancora riconosciuta come affidabile da tutti i sistemi. Per questo motivo esiste un certificato Intermediate cross, che permette di validare la Intermediate CA GoDaddy TLS Intermediate CA DV - R1v1 con la vecchia radice G2.
Andando su https://certs.godaddy.com/repository è possibile scaricare il certificato cross R1->G2 che dobbiamo caricare sui nostri sistemi assieme a tutta la catena: il certificato è indicato come GoDaddy TLS Root CA - Certificato cross da R1 a G2.
NetScaler, quando esegue l’Handshake SSL/TLS, invia al client la catena di certificati intermedi legati (linked) nell’appliance. Se manca il certificato cross-signed, NetScaler invia solo l’intermedio R1; il browser del client, se non ha ancora la nuova Root R1 nel proprio trust store locale, tronca la catena e restituisce errore. Pertanto dovremo caricare tutti i certificati:
GoDaddy TLS Intermediate CA DV - R1v1GoDaddy TLS Root CA - Certificato cross da R1 a G2
e collegare correttamente tutta la catena. Se avessimo caricato anche la root CA R1 di GoDaddy, nel fare il link avremo la possibilità di scegliere quale certificato collegare nella catena:

Una volta sistemata la catena con questa Intermediate cross R1-G2 il nostro certificato sarà correttamente riconosciuto.
Per ulteriori informazioni: