Se un server o un client è in grado di verificare un certificato client / server - catena di certificati intermedia con una radice root ca?

1

Sto provando a testare la seguente configurazione:

Un server RADIUS funziona con il protocollo EAP-TLS. Il client e il server hanno i seguenti certificati:

Client
Chiave pubblica: clientcert_intermediatecert_chain.pem
Certificato CA: rootcert.pem

Server
Chiave pubblica: servercert_intermediatecert_chain.pem
Certificato CA: rootcert.pem

Entrambi, il certificato client ( clientcert.pem ) e il certificato server ( servercert.pem ) sono firmati dallo stesso certificato intermedio ( intermediatecert.pem ), che è firmato dal certificato di origine ( rootcert.pem ).
Entrambe le catene, che sono impostate come chiavi pubbliche, vengono assemblate in questo modo (tramite il comando Shell):
cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem
cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem

Ora, il client prova a connettersi al server. Entrambe le parti inviano le loro chiavi pubbliche e cercano di verificare le chiavi pubbliche ricevute con rootcert.pem

So che il modo "normale" sarebbe che la chiave pubblica fosse solo il server o il certificato client. E il certificato CA sarebbe la catena imcert-rootcert, ma devo sapere se anche questo funzionerebbe.

Ora le mie domande:

  1. È legittimo che la chiave pubblica sia una catena composta dal certificato server / client e dal certificato intermedio?
  2. E se sì, vale per entrambi i lati (server e client)?
  3. Se un server (come FreeRADIUS) o un client è in grado di verificare catene come queste con il certificato di origine, se le ricevono dal contatore?

Sulla base della mia esperienza, FreeRADIUS non verifica correttamente tale catena di certificati. Se non sbaglio FreeRADIUS utilizza la libreria OpenSSL e fa la stessa cosa del comando seguente nella situazione sopra indicata:

openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem

E sono abbastanza sicuro che questo non funzioni. OpenSSL non può verificare una catena come questa con il certificato di root. Fallisce nel tentativo di mettere insieme la catena della fiducia.
È corretto?

A proposito, FreeRADIUS restituisce lo stesso errore del comando verify: error 20 at 0 depth: cannot find issuer certificate che significa che non può mettere insieme la catena della fiducia.

    
posta Jannis Kappertz 07.07.2017 - 09:58
fonte

2 risposte

1

Non una risposta completa (ancora?), ma:

Sì La libreria OpenSSL chiamata (direttamente o come qui tramite libssl) da un programma come FreeRADIUS può verificare una catena ricevuta; no la tua riga di comando openssl verify non verifica una catena. Questo è coperto in link (mio) ma che è downvoted e suggerito offtopic, quindi copierò la parte pertinente qui:

openssl commandline verify legge solo un certificato , il primo, dal file dato come operando, o da ciascun file se ne viene dato più di uno. Questo differisce dai file specificati con le opzioni -CAfile -trusted -untrusted che possono (e in genere fanno) contenere più certificati.

Il tuo file clientcert_intermediatecert_chain.pem contiene il certificato cliente e il certificato intermedio in quell'ordine. Viene utilizzato solo il certificato cliente, il certificato intermedio viene ignorato e di conseguenza non si dispone di una catena valida da verificare.

Per utilizzare la riga di comando per simulare / testare la convalida effettuata da un ricevitore (per una catena di certificati client, il server) fornire il certificato foglia come operando e tutti gli altri certificati (catena) trasmessi (qui il primo intermedio) con -untrusted e l'ancora o gli ancoraggi più eventuali intermedi "noti" nel truststore espliciti o predefiniti (il tuo -CAfile root va bene, anche se esistono altri modi validi).

Per quanto riguarda il problema reale (Y) con FreeRADIUS: sei sicuro che il client manda la catena? Hai una traccia?

In alternativa: se il client (o in generale peer) non invia i certificati di catena necessari, ma sono nel truststore locale che è probabilmente una cosa spuria da fare, OpenSSL < li userò . Potresti provare ad aggiungere almeno temporaneamente il cert intermedio al file che utilizzi per CA_file o alla directory hashnamed per CA_path .

    
risposta data 08.07.2017 - 07:46
fonte
0

Sembra che il problema del mio setup sia stato che il client non ha inviato la catena client-intermedia completa, ma solo il certificato client (lo abbiamo capito usando Wireshark). Al contrario, il server radius che invia una catena server-intermedia funziona perfettamente.

Quindi, per rispondere alla mia domanda: Sì, questa configurazione dovrebbe funzionare, in entrambe le direzioni.

    
risposta data 02.08.2017 - 11:58
fonte

Leggi altre domande sui tag