stiamo sostituendo i certificati con l'hash SHA1 a causa della mossa di Google per consentire loro di apparire meno sicuri in Chrome. I certificati sostitutivi utilizzano una CA intermedia diversa rispetto a quelli attualmente in uso, ma la stessa CA radice. Durante i test abbiamo notato che i nostri client SSL non riuscivano a convalidare la catena usando i nuovi certificati che non capiamo perché.
Ecco le specifiche:
Attualmente la catena che il server invia assomiglia a questa:
- CA principale, firmata da CA CA server dalla stessa autorità (fornita con certificato server)
- CA intermedio 1 (fornito con certificato server)
- Certificato server
nei nostri client SSL di cui ci fidiamo:
- CA root, autofirmato, ma stesso CN e stessa chiave (stesso skid)! (Scaricato dall'autorità, come Mozilla incorpora nei suoi prodotti)
- CA intermedio 1 (identico a quello inviato dal server)
Funziona con la catena di certificati corrente ma solo perché ci fidiamo di CA intermedio 1. Se rimuoviamo questo, fallisce perché il server CA X non è considerato affidabile. Ovviamente, i nuovi certificati non funzionano, perché sono firmati da un'altra CA intermedia.
Ora, dalla lettura della RFC 5280, sezione 6.1, la mia impressione è che il nostro client SSL non aderisce agli standard, perché da quello che ho letto la mia comprensione di una convalida del percorso del certificato è questa (semplificata):
- inizia con l'ancora di fiducia; convalidare se è ancora valido (tempo) ecc.
- per i seguenti certificati: controlla se il CN e la chiave del certificato precedente corrispondono agli emittenti CN e alla chiave del certificato corrente (e controlla i vincoli pathlen ecc ...)
- l'ultimo certificato non deve essere un certificato CA
Il punto è: il nostro client SSL non riesce a convalidare la catena perché il certificato di root che è configurato per utilizzare come un'ancora di trust ha un emittente diverso dal certificato di root presentato dal server. Tuttavia, CN e la chiave sono identici per entrambi. Dalla mia comprensione di ciò che ho letto in RFC 5280 il client SSL non dovrebbe preoccuparsi per l'emittente della sua ancora di fiducia. Non ci sono anche politiche definite nei certificati all'interno della catena che imporrebbero qualcosa di simile. Tuttavia, non so se il nostro client SSL potrebbe imporre politiche aggiuntive che porterebbero a questo (non al mio sistema).
Quindi la mia domanda è: il nostro client SSL si comporta correttamente in questo scenario o no? E, naturalmente: perché?
Grazie in anticipo
Modifica: so che il server dovrebbe solo inviare il certificato CA intermedio e non il certificato radice, tuttavia, stiamo usando ciò che l'autorità ha fornito come un cabundle insieme al certificato, che includeva il certificato di origine. Inoltre, da quello che so, il client dovrebbe ignorare il certificato di root inviato dal server in quel caso.
Inoltre, ciò che è strano è che il client si comporta come se convalisse la catena dal certificato del server a qualcosa che può fidarsi e poi si ferma, mentre le specifiche dicono che dovrebbe convalidare la catena dall'ancoraggio di sicurezza fino al certificato del server.
Modifica2: le diverse "versioni" del certificato CA radice hanno tutte lo stesso SKID - differiscono solo per l'emittente e il numero di serie (ovviamente).
Inoltre, mi è venuto in mente, dalle informazioni della prima modifica sembra che il client SSL abbia bisogno del certificato di root in trust e chain per essere identico nel suo emittente e possibilmente in numero seriale per accettarlo.