È possibile configurare mod_ssl in modo tale che accetti il certificato client emesso da una CA intermedia firmata da una CA radice?

0

Ho girato Internet per un po ', ma non ho trovato nulla che risponda al mio problema. Quindi, se il problema simile è stato risposto in precedenza, si prega di condividere il link.

Problema:

Ho una configurazione intranet in cui ho bisogno di avere l'autenticazione del client usando SSL.

Ho seguito la guida per creare CA e certificati

Si supponga che la macchina A stia cercando di connettersi alla macchina B (è richiesto anche il retro). La macchina A ha una CA intermedia (I-CA-a) emessa dalla CA principale. La macchina B ha un'altra CA intermedia (I-CA-b) emessa dalla stessa CA radice. Sia A che B hanno il certificato pubblico di CA principale. La macchina A non sa di I-CA-b e la macchina B non sa di I-CA-a.

La macchina B sta eseguendo il server con un certificato del server firmato da I-CA-b e la macchina A sta tentando di connettersi al server B utilizzando un certificato client firmato da I-CA-a.

È possibile che la macchina B accetti la connessione dalla macchina A poiché

  1. la macchina B non ha informazioni su I-CA-a
  2. ma I-CA-a è stato rilasciato dalla CA radice su cui si basa la macchina B.

Ho provato a configurare httpd nella macchina B in questo modo.

SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile "/root/ca/certs/root_ca.cert.pem"

Quando provo a connettermi a B da A usando curl

curl --cacert /root/ca/certs/root_ca.cert.pem --cert /root/ca/intermediate/certs/client-A.cert.pem --key /root/ca/intermediate/certs/client-A.key.pem https://<ip of machine B>/...

Questo fallisce con il seguente output.

curl: (35) Peer does not recognize and trust the CA that issued your certificate.

Ho provato a concatenare il certificato CA emittente del certificato client (certificato di I-CA-a) con client-A.cert.pem

cat /root/ca/intermediate/certs/intermediate.cert.pem /root/ca/intermediate/certs/client-A.cert.pem > /root/ca/intermediate/certs/client-A-chained.cert.pem

e usato questo con curl

curl --cacert /root/ca/certs/root_ca.cert.pem --cert /root/ca/intermediate/certs/client-A-chained.cert.pem --key /root/ca/intermediate/certs/client-A.key.pem https://<ip of machine B>/...

Anche questo non funziona con il seguente output.

curl: (35) Peer reports failure of signature verification or key exchange.

Se faccio il concatenamento in un altro modo, cioè,

cat /root/ca/intermediate/certs/client-A.cert.pem /root/ca/intermediate/certs/intermediate.cert.pem > /root/ca/intermediate/certs/client-A-chained.cert.pem

allora lo stesso comando di arricciatura fallisce con questo output.

curl: (35) Peer does not recognize and trust the CA that issued your certificate.

Che cosa sto sbagliando? È persino possibile autenticare i client in questo modo? In caso contrario, qualcuno può suggerire un modo alternativo per autenticare i client utilizzando SSL?

Il vincolo è che oltre alla CA radice e alla firma delle CA intermedie, il resto del certificato e la generazione della chiave devono essere automatizzati.

Quindi la macchina B potrebbe dover fornire certificati client a più client in fase di esecuzione.

Alternativa a cui riesco a pensare ma con un problema :

La macchina A genera una chiave privata e una CSR e invia quella CSR alla macchina B. La macchina B firma il CSR usando I-CA-b e lo rimanda alla macchina A che può utilizzare la macchina A. Ma il problema è che in che modo la macchina B autentica la macchina A prima di firmare il CSR?

Aggiorna Ho trovato questo dopo che ho postato la domanda. Questo sembra rispondere a parte della mia domanda. Ma ho ancora bisogno di più calrificazione.

Aggiornamento 2 Ho anche trovato questo , anche se non c'è molto da aiutare. Se si tratta di un problema CURL, c'è qualche altra alternativa?

    
posta Abhishek Dey 02.11.2016 - 11:48
fonte

0 risposte

Leggi altre domande sui tag