2011-09-16 11 views
8

Il mio codice sta tentando di accedere a un server HTTPS e ha il proprio certificato. Esempio, l'IP è "10.0.1.101".Come rendere libcurl look nel portachiavi Mac per i certificati

Se si passa attraverso Safari e si accede a "http://10.0.1.101", tutto è OK. Faccio un semplice curl_easy_perform() per questo URL e i dati possono essere estratti dall'URL HTTP. Freddo.

Quindi provo ad accedere a "https://10.0.1.101" (sì, HTTPS) e da Safari, accetto il certificato e gli conferisco l'opzione "attendibilità" e successivamente, l'accesso di Safari all'URL HTTPS è OK.

Quindi il certificato è stato aggiunto al portachiavi Mac ma quando provo un curl_easy_perform() sull'URL HTTPS, viene comunque restituito con un CURLE_SSL_CACERT. libcurl non ha potuto autenticare il certificato HTTPS con certificati CA noti.

Qual è il collegamento mancante tra il controllo del certificato di libcurl e il portachiavi Mac? C'è addirittura un collegamento? È possibile creare l'aspetto di libcurl nel portachiavi Mac per i certificati? Se é cosi, come?

+0

È possibile utilizzare l'opzione CURLOPT_CAINFO per puntare a un file portachiavi? – radj

+1

C'è un comando 'security' nel terminale, penso che tu possa usare l'output di quel comando per ottenere la catena di fiducia. (Non sono un esperto di certificati o terminali, ho provato in una sceneggiatura e funziona con il ricciolo) –

+0

@Marcelo Alves, grazie. Sembra un buon punto di partenza, ma se puoi, condividi i passaggi come hai fatto? – radj

risposta

2

No. libcurl costruito per utilizzare OpenSSL leggerà solo certificati CA da un singolo file PEM o da una directory di certificati CA che sono stati preparati in stile OpenSSL.

Non c'è magia speciale per il portachiavi Mac implementato.

+2

Davvero? Bene, questo è * strano *. La mia macchina che esegue Mountain Lion "funziona" e riconosce il certificato, ma la mia macchina che esegue Yosemite è * no go *. – Michael