使用curl下载https地址文件时,调用 curl_easy_perform 函数返回错误码60,表示CURL_SSL_CACERT错误,大概的意思是没有设置证书。当前使用的 curl版本为:libcurl/7.28.1 OpenSSL/1.0.1u zlib/1.2.2。
curl在访问https地址时,默认会开启有效性验证,具体有验证服务器证书真实性以及服务器是否是该证书的持有者。
此项验证,由 CURLOPT_SSL_VERIFYPEER 选项控制,设置1表示开启验证,0表示关闭验证。 curl使用默认CA证书列表(证书搜索路径由编译时决定),可通过CURLOPT_CAINFO或者 CURLOPT_CAPATH选项更改受信任根证书路径。
此项验证,由 CURLOPT_SSL_VERIFYHOST 选项控制,该选项有以下几种取值:
根据上述的分析,有如下几种解决方案:
方案一:关闭curl下载https文件的安全验证。具体方法如下:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
方案二:开启验证,并指明验证依赖的CA证书路径。
下载证书有效性校验文件,下载完成后,将该文件放在程序所在目录,然后添加如下
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1L); curl_easy_setopt(hCurl, CURLOPT_SSL_VERIFYPEER, 1L); curl_easy_setopt(hCurl, CURLOPT_CAINFO, ".\cacert.pem");
CURLOPT_CAINFO:指定证书文件全路径,使用相对路径即可。 CURLOPT_CAPATH:指定证书所在目录,官方文档里面说:The CURLOPT_CAPATH function apparently does not work in Windows due to some limitation in openssl。在windows上不建议使用该选项。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。