È possibile, entro i limiti della specifica X.509, contrassegnare una CA intermedia come attendibile per uno scopo specifico, ad es. per verificare una chiave server VPN, HTTPS, ecc., proprio come funzionerebbe con una CA radice?
I miei client VPN hanno tutti un modo per fornire esplicitamente un certificato CA affidabile, che viene utilizzato per verificare l'autenticità del server VPN. Finché fornisco il certificato CA radice, questo funziona come previsto - il certificato è attendibile. (I certificati intermedi vengono forniti come parte dell'handshake TLS.)
Tuttavia, sto usando una CA intermedia e mi piacerebbe molto fornire quel certificato, invece della CA radice. Nella mia comprensione di X.509, dovrebbe funzionare:
La chiave del server VPN è firmata dalla CA intermedia e, per quanto comprendo X.509, è tutto ciò che è necessario per stabilire una catena fidata.
Ma in pratica, non funziona: il mio client VPN non si connette.
Oltre alla VPN, ho provato questo con l'autenticazione 802.1X / EAPOL e con più client, con gli stessi risultati: fornire il certificato CA radice al client funziona; fornire il mio certificato CA intermedio no.
Questa è la progettazione, o è solo la maggior parte delle implementazioni?
(Io uso una VPN basata su TLS, ma come ho provato anche con 802.1X e TTLS, sembra essere correlata a TLS o X.509, e non alla mia specifica architettura client / server VPN.)
Aggiornamento: Mi piace un commit OpenSSL che implementa l'aggiunta di non-self certificati CA con segno di firma come trust ancore. Sfortunatamente, questo non è ancora incluso in nessuna versione di rilascio, quindi tutti i workaround proposti nei commenti si applicano ancora.
Aggiornamento 2:
OpenSSL ora contiene questa opzione nella versione di rilascio, a partire dalla 1.0.2. Il flag corrispondente per il client della riga di comando è partial_chain
e il flag programmatico sembra essere X509_V_FLAG_PARTIAL_CHAIN
.
Inoltre, di recente ho dovuto verificare i certificati del server in Java: almeno nella versione JDK 1.8 dell'implementazione SSL del provider Sun JSSE, l'aggiunta di un certificato foglia al TrustManager
predefinito funziona senza configurazioni speciali e la verifica ha esito positivo se la CA principale era stata fornita.