2010-04-28 10 views
6

Qualcuno può dirmi qual è la differenza tra SSL_CTX_set_cert_verify_callback e SSL_CTX_set_verify? Da documenti OpenSSL:SSL_CTX_set_cert_verify_callback vs. SSL_CTX_set_verify

SSL_CTX_set_cert_verify_callback() imposta la funzione di verifica callback per CTX. Gli oggetti SSL creati da ctx ereditano l'impostazione valida nel momento in cui viene chiamato SSL_new (3).

e:

SSL_CTX_set_verify() imposta i flag verifica per ctx modalità di essere e stabilisce la funzione verify_callback da utilizzare. Se non è specificata alcuna funzione di callback, il puntatore NULL può essere utilizzato per verify_callback.

Quindi sto cercando di capire quale callback inviare per ciascuno (dal lato client).

Grazie esperti.

risposta

7

SSL_CTX_set_cert_verify_callback() significa che si sta specificando una funzione per eseguire l'intero processo di convalida (passando la catena di certificati che convalida ogni certificato a turno). [probabilmente non vuoi farlo, come indicato di seguito]

SSL_CTX_set_verify(), d'altra parte, specifica una funzione che viene chiamata quando il validatore predefinito controlla ogni certificato, con preverify_ok impostato su 0 o 1 per indicare se la verifica del certificato in questione ha funzionato.

Dal doc per SSL_CTX_set_cert_verify_callback()

AVVERTENZE

Non mescolare la richiamata di verifica descritto in questa funzione con la funzione verify_callback chiamato durante il processo di verifica. Quest'ultimo viene impostato utilizzando la famiglia di funzioni SSL_CTX_set_verify (3) .

Fornire una procedura di verifica completa compreso il certificato impostazioni di scopo ecc. È un'attività complessa . La procedura integrata è abbastanza potente e nella maggior parte dei casi dovrebbe essere essere sufficiente per modificare il suo comportamento utilizzando la funzione verify_callback.

+0

SSL_CTX_set_verify() viene chiamato solo quando il validatore predefinito scopre che un determinato certificato non è riuscito a convalidare? Quindi verrà chiamato solo quando qualcosa non va bene con il certificato? – BreakPoint

+0

Vedi la mia risposta. Sarà chiamato per il cliente cert indipendentemente dal risultato della convalida. OpenSSL passa il risultato al callback nell'argomento preverify_ok. –

+0

@ZZ esatto, creerò il riferimento –

2

SSL_CTX_set_cert_verify_callback() modifica la funzione di verifica del certificato predefinita. Probabilmente non dovresti farlo. È abbastanza complicato, è necessario controllare la firma per ogni certificato, verificare la catena, eventualmente controllare CRL. È la parte più complicata di SSL.

SSL_CTX_set_verify() è utilizzato per impostare la modalità di SSL. Se la modalità è SSL_VERIFY_PEER (SSL bidirezionale), è necessario impostare anche un callback in questa funzione per verificare ulteriormente il certificato client (controllando CN contro una white-list, ecc.). Per altre modalità, questo CB non viene utilizzato. Dato che hai detto che sei in modalità client, probabilmente non devi preoccuparti di questa chiamata.

+0

Grazie per la risposta. La convalida di default verifica la mancata corrispondenza del nome del soggetto? Ho un'implementazione di esempio che utilizza SSL_CTX_set_verify() per eseguire questo controllo. Dal lato del cliente – BreakPoint