Certificato SSL che si blocca con certificati autofirmati

0

Sto cercando di capire in che modo il blocco dei certificati funziona con i certificati autofirmati. La mia idea è che un server con un certificato autofirmato accetterà le connessioni solo dai client che hanno ottenuto il certificato del server (blocco del certificato).

Ho generato la chiave privata del server & file di certificato usando il comando di sotto

 Server: openssl req -x509 -days 365 -newkey -sha512 rsa:4096 -keyout keyfile.key -out certfile.cert

E poi sto cercando di accettare una connessione con questo comando

Server: openssl s_server -accept 5000 -key keyfile.key -cert certfile.cert
Client:openssl s_client -connect localhost:5000

La connessione ha esito positivo ma sembra che il server stia inviando il suo certificato durante l'handshake che non è quello che mi aspetto quindi ho provato il comando di sotto

Server: openssl s_server -accept 50020 -key keyfile.key -cert certfile.cert -Verify 0
Client: openssl s_client -connect localhost:50020

Ora il client non è in grado di connettersi e il server sta dando questo errore:

 140736924775432:error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate:s3_srvr.c:3269:

Non sono sicuro di come specificare il file del certificato del server dal lato client. Ho copiato il certificato del server (certfile.cert) sul client e ho provato con il comando seguente, ma questo richiede anche una chiave privata.

Client: openssl s_client -connect localhost:50020 -cert certfile.cert

Mi sto confondendo con Server & Certificati client e c'è un modo per il client di specificare il certificato del server?

    
posta Harish 07.12.2016 - 20:30
fonte

1 risposta

2

Penso che tu abbia frainteso il funzionamento di TLS e blocco dei certificati. Il client non specificherà quale certificato verrà restituito al server (a parte l'utilizzo dell'estensione SNI per impostare il nome host previsto) ma il server restituirà esattamente il certificato che dovrebbe essere utilizzato dal client per identificare il server. Il client eseguirà il check-in dello scenario di blocco con un certificato autofirmato se il certificato inviato corrisponde al certificato previsto.

L'invio di questo certificato all'interno di un handshake completo (cioè non ripreso) non è facoltativo quando viene utilizzata l'autenticazione basata su certificato, cioè non c'è modo di fare in modo che il server non invii il certificato (ma prova ancora il possesso della chiave privata corrispondente) perché il cliente lo sa già. Per ulteriori dettagli, consulta Come funziona SSL / TLS .

    
risposta data 07.12.2016 - 20:41
fonte

Leggi altre domande sui tag