Wie funktioniert SSL peer_verify unter Android?
Ich habe libcurl-7.36.0 mit openssl-1.0.1h auf Android erfolgreich erstellt. Ich habe einen Beispielcode zum Testen der HTTPS-Verbindung ausgeführt. Der SSL_VERIFYPEER ist standardmäßig aktiviert. Der Zertifikatspfad unter Android lautet / system / etc / security / cacerts, daher setze ich CURLOPT_CAPATH auf / system / etc / security / cacerts.
ls -l /system/etc/security/cacerts
-rw-r--r-- root root 4767 2012-09-22 11:57 00673b5b.0
-rw-r--r-- root root 4573 2012-09-22 11:57 03e16f6c.0
-rw-r--r-- root root 5292 2012-09-22 11:57 08aef7bb.0
......
Hier ist ein Ausschnitt meiner Codes.
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com:443");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // default
curl_easy_setopt(curl, CURLOPT_CAPATH, "/system/etc/security/cacerts");
curl_easy_perform(curl);
Curl gibt immer einen Fehler zurück:
== Info: SSL certificate problem: unable to get local issuer certificate
== Info: Closing connection 0
curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
Es funktioniert, wenn ich die CA-Bundle-Datei ca-bundle.crt von herunterladehttp://curl.haxx.se/docs/caextract.html undcurl_easy_setopt(curl, CURLOPT_CAINFO, "path:/ca-bundle.crt")
.
Hier ist meine Frage: Gibt es eine Möglichkeit, die Überprüfung von SSL-Peers durch Lesen des Zertifikats von zu ermöglichen?/system/etc/security/cacerts
ohne die CA-Bundle-Datei manuell herunterzuladen und anzugebenCURLOPT_CAINFO
?