OpenSSL 1.0.2读取md5 CA证书

时间:2014-11-14 17:32:27

标签: android ssl curl openssl ssl-certificate

我为Android构建了curl 7.39.0和openssl 1.0.2。我将openssl指向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证书?

Google必须以某种方式完成此操作,因为他们的openssl repo for android使用版本1.0.1j。

否则我想我的选择是使用像this answer中的openssl 0.9.8,或使用我自己的CA证书包 - 但我宁愿拥有最新版本,也不必担心维护CA证书自己。

3 个答案:

答案 0 :(得分:3)

/system/etc/security/cacerts文件夹中的所有这些文件都是PEM格式的证书,名称是主题的哈希值。我不认为你可以使用更新的openssl版本的文件夹。但您可以简单地将所有这些文件合并到一个文件中,并将其与CURLOPT_CAINFO一起使用。虽然这不如直接使用目录那么好,但可能比从其他地方获取CA捆绑包更好。

答案 1 :(得分:0)

使用您自己的CA bunldle比从Android系统目录中读取更安全,因为某些OEM中出现了各种权限问题,如果Google决定更改新版本的目录,则必须再次更改代码。如果CA捆绑包ex:" cacert.pem"可以轻松维护自己的CA捆绑包。在资产目录中,函数将其从资产复制到内部存储,并提供CAINFO中该内部存储目录的绝对路径。您可以按照https://github.com/vyshas/CURL-Android-with-verify-peer-中使用1.0.1p和curl 7.40.0

的代码进行操作

答案 2 :(得分:0)

对于遇到相同问题并且不愿意通过应用程序侧面加载证书的读者:我所做的是使用from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC 而不是boringsslopenssl能够以当前格式从Android存储设备中加载证书。

我本来希望使用boringssl,但我不想负责为我的应用“提供”证书并保持其最新。