【问题标题】:OpenSSL 1.0.2 to Read md5 CA CertificatesOpenSSL 1.0.2 读取 md5 CA 证书
【发布时间】:2015-01-12 04:18:04
【问题描述】:

我已经为 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 证书。

【问题讨论】:

    标签: android ssl curl openssl ssl-certificate


    【解决方案1】:

    对于遇到同样问题并且不愿意通过应用程序侧载证书的读者:我所做的是使用boringssl 而不是opensslboringssl 能够以当前形式从 Android 存储中加载证书。

    我更喜欢openssl,但我不想负责为我的应用程序“配置”证书并使其保持最新状态。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-04-10
          • 2018-09-15
          • 2013-03-25
          • 1970-01-01
          • 2010-10-16
          • 2016-01-22
          • 2016-12-18
          • 1970-01-01
          • 2013-11-30
          相关资源
          最近更新 更多