0

我正在尝试在 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”文件夹,也会发生同样的情况。文件存在并且可以读取。

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

4

2 回答 2

4

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

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

curl_easy_setopt (curl, CURLOPT_CAPATH, caCertPath);

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

curl_easy_setopt (curl, CURLOPT_CAINFO, caCertPath);

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

于 2013-04-02T09:31:22.293 回答
0

从手册:

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

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

CURLOPT_CAINFO 选项有效

于 2014-01-14T13:53:14.863 回答