I certificati client devono essere considerati affidabili dal client?

9

Sto cercando dei chiarimenti sui requisiti di affidabilità (se ce ne sono) dei certificati client.

Sto lavorando con una terza parte per accedere ai loro servizi tramite Mutual TLS.

Genero una CSR, la invio alla terza parte, mi inviano un certificato (che hanno generato utilizzando la propria CA). È un singolo certificato. Non ho ricevuto alcun certificato intermedio, poiché presumo che non ti serva per inviare richieste autenticate dal certificato del client .

Quando tento di connettermi con questo certificato, ottengo un errore di handshake:

openssl s_client -connect the-server.com:443 -cert the-cert.pem -key the-key.pem -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
verify error:num=20:unable to get local issuer certificate
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write certificate verify A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL3 alert read:fatal:handshake failure
SSL_connect:failed in SSLv3 read finished A
78460:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59/src/ssl/s3_pkt.c:1145:SSL alert number 40
78460:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59/src/ssl/s23_lib.c:185:

Mi viene detto che non funziona come: 'i file pem non contengono i certificati CA pubblici che hanno firmato il certificato client' tuttavia, se questo fosse il caso, il client potrebbe inviare anche il certificato (come sembra farlo nei passaggi di negoziazione TLS sopra) se fosse il caso che ci si doveva fidare di esso?

    
posta Mark Kelly 11.11.2015 - 13:56
fonte

3 risposte

8

Do client certificates need to be trusted by the client?

No, il certificato client viene convalidato solo dal server e il certificato del server solo dal client. Pertanto, qualsiasi tipo di affidabilità riguardante il certificato client o la relativa CA di firma è necessaria solo sul server.

... It's a single certificate, with no intermediate

... the pem files do not contain the public CA certs that signed the client certificate

Suggerirei che la prima affermazione sia errata, cioè che il certificato che hai ottenuto sia stato effettivamente firmato da una CA intermedia e che non hai incluso i certificati di catena necessari. I certificati radice di per sé non dovrebbero essere inviati perché questi devono risiedere come attendibili sul lato che sta facendo la convalida, cioè il server in caso di certificati client.

Suggerirei di scoprire quale CA hanno come pre-attendibile sul lato server e confrontarla con l'emittente del certificato. Se non corrispondono, mancano i certificati di catena. Se corrispondono, potrebbe essere un problema con l'installazione sul lato server, ovvero che non hanno la CA necessaria configurata come attendibile dal server per l'autenticazione del client.

    
risposta data 11.11.2015 - 14:46
fonte
4

No, il client non ha bisogno di fidarsi dei certificati che presenta al server. (Il server non ha bisogno di fidarsi dei certificati che presenta al client). Solo l'altro lato della connessione deve essere in grado di verificare i certificati presentati.

Detto questo, la chiave privata e il certificato utilizzati dal cliente DEVONO corrispondere. Puoi verificarlo usando i seguenti comandi:

openssl rsa -in localhost.key -modulus -noout openssl x509 -in localhost.crt -modulus -noout Il loro output deve corrispondere esattamente.

Il server potrebbe aspettarsi che il client invii il certificato intermedio CA necessario per verificare l'autenticità del certificato utente, ma sarebbe molto strano e praticamente inaudito.

Infine, se stai distribuendo un nuovo sistema, ti suggerirei vivamente non di usare OpenSSL 0.9.8 - riceverà aggiornamenti di sicurezza solo fino a end dell'anno .

    
risposta data 11.11.2015 - 14:46
fonte
1

Dato che il certificato client viene emesso da una CA interna, il server a cui ci si deve connettere dovrà "fidarsi" della CA interna per poter verificare il certificato client.

Anche se il client fosse in grado di presentare il certificato pubblico della CA interna, il server non si fiderebbe ancora del certificato perché non è stato firmato da una delle sue radici attendibili (cioè una delle tante CA pubbliche ... Verisign, Comodo, ecc. .).

Gli amministratori del server devono installare il certificato della CA interna (vale a dire la radice per il certificato del client) nel trust del server.

    
risposta data 11.11.2015 - 15:33
fonte

Leggi altre domande sui tag