前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决Curl下载https地址文件出错的问题

解决Curl下载https地址文件出错的问题

原创
作者头像
用户1685462
修改2021-07-26 10:40:22
1.2K0
修改2021-07-26 10:40:22
举报
文章被收录于专栏:网站教程网站教程

问题描述

使用curl下载https地址文件时,调用 curl_easy_perform 函数返回错误码60,表示CURL_SSL_CACERT错误,大概的意思是没有设置证书。当前使用的 curl版本为:libcurl/7.28.1 OpenSSL/1.0.1u zlib/1.2.2。

浏览器在访问https站点,会通过内置的信任根证书来验证服务器有效性。具体验证方法有:

  • 查看证书的颁发者是否受信任
  • 验证证书是否吊销(下载已吊销证书列表对比或实时验证)
  • 验证证书是否在有效期
  • 验证服务端是否是该证书的持有者。

curl在访问https地址时,默认会开启有效性验证,具体有验证服务器证书真实性以及服务器是否是该证书的持有者。

验证服务器证书真实性

此项验证,由 CURLOPT_SSL_VERIFYPEER 选项控制,设置1表示开启验证,0表示关闭验证。 curl使用默认CA证书列表(证书搜索路径由编译时决定),可通过CURLOPT_CAINFO或者 CURLOPT_CAPATH选项更改受信任根证书路径。

验证服务器是否是该证书持有者

此项验证,由 CURLOPT_SSL_VERIFYHOST 选项控制,该选项有以下几种取值:

  • 0:忽略证书认证
  • 1:7.28.1版本的,设为1不会改变该标志。 7.66.0版本,1与2效果一样。
  • 2:对端服务器必须是证书的持有者。具体通过证书中的Common Name field或者Subject Alternate Name field,来验证请求url中的域名是否有效。(默认值)

问题解决

根据上述的分析,有如下几种解决方案:

方案一:关闭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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 浏览器在访问https站点,会通过内置的信任根证书来验证服务器有效性。具体验证方法有:
    • 验证服务器证书真实性
      • 验证服务器是否是该证书持有者
      • 问题解决
      相关产品与服务
      命令行工具
      腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档