我正在尝试通过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”文件夹,也会发生同样的情况。文件存在并且可以读取。
似乎缺少有关此错误的信息。
我做错了什么?
最佳答案
好吧,经过一些令人讨厌的搜索,我找到了问题和解决方案。
这似乎不适用于文件夹或文件路径:
curl_easy_setopt (curl, CURLOPT_CAPATH, caCertPath);
但这在提供PEM文件的完整路径时有效:
curl_easy_setopt (curl, CURLOPT_CAINFO, caCertPath);
希望这对以后的人有帮助