2012-01-16 5 views
8

Sto utilizzando libcurl nella mia applicazione C per comunicare con un server HTTPS che ho configurato. Ho generato un certificato autofirmato su quel server che vorrei usare con curl.Aggiunta del certificato SSL autofirmato per libcurl

Sono consapevole di impostare CURLOPT_SSL_VERIFYPEER su 0 per aggirare la verifica SSL, ma desidero aggiungere il certificato generato ai certificati CA "validi" di curl.

Ho provato a impostare CURLOPT_CAPATH e CURLOPT_SSLCERT nel percorso della chiave pubblica SSL del server, ma non riesce a superare la verifica.

Come posso aggiungere la mia CA/certificato autofirmato in modo che libcurl lo convalidi correttamente?

+3

Aggiungi l'aggiornamento come una domanda. btw, l'opzione '--libcurl' curl può generare codice sorgente libcurl-using (per vedere quali opzioni puoi usare) se hai già un comando curl di lavoro. – jfs

risposta

2

Per aggiungere un certificato auto-firmato, utilizzare CURLOPT_CAINFO

Per recuperare il certificato pubblico SSL di un sito, utilizzare

openssl s_client -connect www.site.com:443 | tee logfile 

Il certificato è la parte segnata da ----BEGIN CERTIFICATE---- e
---END CERTIFICATE---- .

Salva che il certificato in un file, e utilizzare curl in una maniera in questo modo:

CURL* c = curl_easy_init(); 
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com"); 
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt"); 
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1); 
curl_easy_perform(c); 
curl_easy_cleanup(c); 
0

In primo luogo, è sorta di mixare file "Autorità di certificazione" e file "certificato" che mi confonde.

Come posso aggiungere la mia CA/certificato autofirmato in modo che libcurl sia in grado di convalidarlo con successo con lo ?

Questo potrebbe essere visto come una risposta complementare a quella sopra. Nel caso in cui si desideri aggiungere una CA autofirmata (ogni CA radice è autofirmata) in modo che libcurl convalidi correttamente il certificato di un sito Web, che è stato generato dalla CA, quindi continua a leggere.

Con CURLOPT_CAINFO è necessario passare il file "Autorità di certificazione" (CA) utilizzato durante la generazione del certificato (non CA) del sito che si desidera verificare.

(Non so se questa opzione funziona passando un certificato non CA, la documentazione non è chiara su questo e la risposta precedente ha 2 voti positivi, quindi se qualcuno lo ha testato per favore commenta)

È anche possibile passare un file di catena dell'autorità di certificazione che contiene la CA utilizzata, nel caso in cui non fosse una CA di origine.

Ecco un piccolo tutorial che ho trovato che può aiutare a testare la vostra soluzione:

Creazione di una CA principale privato: http://www.flatmtn.com/article/setting-openssl-create-certificates

Creazione di un certificato del sito: http://www.flatmtn.com/article/setting-ssl-certificates-apache