2014-11-14 126 views
3

我已經建立了捲曲7.39.0和OpenSSL 1.0.2 Android系統。我點的OpenSSL的CA證書目錄:OpenSSL的1.0.2閱讀MD5 CA證書

curl_easy_setopt(curl, CURLOPT_CAPATH, "/system/etc/security/cacerts"); 

但是,當我打電話curl_easy_perform我遇到錯誤代碼60:Peer certificate cannot be authenticated with given CA certificates

googling我發現Android cacerts是用md5哈希生成的,但是從版本1.0.0開始,openssl使用sha1。

有誰知道如何使OpenSSL的1.0.2能夠讀取Android的MD5 CA證書?

谷歌必須這樣做不知何故,因爲他們openssl repo的Android使用的版本1.0.1j。

否則我想我的選擇是使用openssl 0.9.8 like this answer,或者使用我自己的CA證書包 - 但我寧願擁有最新版本,也不必擔心自己維護CA證書。

回答

3

所有在/system/etc/security/cacerts文件夾,這些文件在PEM格式的證書和名稱是在對象的哈希值。我不認爲你可以像使用更新的openssl版本那樣使用這個文件夾。但你可以簡單地將所有這些文件一起記錄到一個文件中,並使用CURLOPT_CAINFO。雖然這不如直接使用目錄,但它可能比從其他地方獲取CA軟件包要好。

0

由於在某些OEMS中出現的各種權限問題,使用自己的CA bunldle比從android系統目錄讀取更安全,並且如果Google決定爲更新版本更改目錄,您將不得不再次更改代碼。如果CA bundle ex:「cacert.pem」位於資產目錄中,並且函數將其從資產複製到內部存儲並在CAINFO中提供該內部存儲目錄的絕對路徑,那麼可以輕鬆維護自己的CA捆綁包。您可以按照https://github.com/vyshas/CURL-Android-with-verify-peer-中的代碼使用1.0.1p和curl 7.40.0