OpenSSL的1.0.2阅读MD5 CA证书

问题描述:

我已经建立了卷曲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证书。

所有在/system/etc/security/cacerts文件夹,这些文件在PEM格式的证书和名称是在对象的哈希值。我不认为你可以像使用更新的openssl版本那样使用这个文件夹。但你可以简单地将所有这些文件一起记录到一个文件中,并使用CURLOPT_CAINFO。虽然这不如直接使用目录,但它可能比从其他地方获取CA软件包要好。

由于在某些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