【问题标题】:iOS cURL: unable to get local issuer certificateiOS cURL:无法获取本地颁发者证书
【发布时间】:2013-03-20 02:33:51
【问题描述】:

我正在尝试在 iOS 上使用 curl 设置与 HTTPS 服务器的安全连接(应用程序是用 C++ 编写的)

我发现我需要为 CURLOPT_CAPATH 选项设置 cacert.pam (http://curl.haxx.se/ca/cacert.pem) 文件路径:

curl_easy_setopt (curl, CURLOPT_CAPATH, "/var/mobile/Applications/811DEF2E-DE1D-4C86-A1FD-129478C8318D/MyApp.app/ca/cacert.pem");
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 2L);

但这只会生成以下详细日志(ip 和 url 已更改):

libcurl/7.29.0 OpenSSL/1.0.1e zlib/1.2.5
* About to connect() to myserver.com port 443 (#0)
*   Trying 128.128.128.128...
* Connected to myserver.com (128.128.128.128) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /var/mobile/Applications/171CA93F-15F2-42A1-938B-01812AF1E555/MyApp.app/ca/cacert.pem
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0

如果我将 CURLOPT_CAPATH 设置为“../MyApp.app/ca”文件夹,也会发生同样的情况。文件存在,可以读取。

似乎缺少有关此错误的信息.. 我做错了什么?

【问题讨论】:

  • 您对 iphone 代码或服务器端脚本有问题吗?
  • 请参阅如何配置本地服务器以处理 HTTPS this 用于 windows 和this post 用于 mac
  • 这和服务器端有什么关系?服务器端安全工作正常,这是客户端(iOS)代码
  • 终于看到一线希望,请参考this

标签: ios ssl curl certificate


【解决方案1】:

好的,经过一番烦人的搜索,我找到了问题和解决方案。

这似乎不适用于文件夹或文件路径:

curl_easy_setopt (curl, CURLOPT_CAPATH, caCertPath);

但这在提供 PEM 文件的完整路径时有效:

curl_easy_setopt (curl, CURLOPT_CAINFO, caCertPath);

希望这对将来的某人有所帮助

【讨论】:

    【解决方案2】:

    来自手册:

    CURLOPT_CAPATH 函数显然在 Windows 中不起作用,因为 openssl 的一些限制

    http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

    CURLOPT_CAINFO 选项有效

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2016-04-20
      • 2018-05-06
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2020-11-29
      • 2021-05-24
      • 2017-07-19
      相关资源
      最近更新 更多