C++解决Curl下载https地址文件出错的问题(curl_easy_perform 返回60)

news/2024/7/12 3:18:38 标签: c++, https

问题描述

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

https%E7%AB%99%E7%82%B9%EF%BC%8C%E4%BC%9A%E9%80%9A%E8%BF%87%E5%86%85%E7%BD%AE%E7%9A%84%E4%BF%A1%E4%BB%BB%E6%A0%B9%E8%AF%81%E4%B9%A6%E6%9D%A5%E9%AA%8C%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9C%89%E6%95%88%E6%80%A7%E3%80%82%E5%85%B7%E4%BD%93%E9%AA%8C%E8%AF%81%E6%96%B9%E6%B3%95%E6%9C%89%EF%BC%9A">浏览器在访问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上不建议使用该选项。


http://www.niftyadmin.cn/n/975717.html

相关文章

一个不可思议的MySQL慢查分析与解决

转载自For DBA 一、前言 开发需要定期的删除表里一定时间以前的数据&#xff0c;SQL如下 mysql > delete from testtable WHERE biz_date < 2017-08-21 00:00:00 AND status 2 limit 500\G前段时间在优化的时候&#xff0c;已经在相应的查询条件上加上了索引 KEY idx…

Apache Storm 官方文档 —— Storm 集群安装配置

本文详细介绍了 Storm 集群的安装配置方法。如果需要在 AWS 上安装 Storm&#xff0c;你应该先了解一下 storm-deploy 项目。storm-deploy 可以自动完成 E2 上 Storm 集群的准备、配置、安装的全部过程&#xff0c;同时还设置好了 Ganglia&#xff0c;方便监控 CPU、磁盘以及网…

基础线段树模板

1.单点更新区段查找 敌兵布阵 C国的死对头A国这段时间正在进行军事演习&#xff0c;所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段&#xff0c;所以每…

C#程序实现窗体的最大化/最小化

C#程序实现窗体的最大化/最小化 http://blog.csdn.net/jiangqin115/article/details/41251215 1 private void button1_Click(object sender, EventArgs e)2 {3 this.WindowState FormWindowState.Maximized;4 this.notifyIcon1.Visible true;5 }6 7 private void bu…

Retrofit2源码解析(一)

Retrofit2源码解析系列 Retrofit2源码解析——网络调用流程(上)Retrofit2源码解析——网络调用流程(下)本文基于Retrofit2的2.4.0版本 implementation com.squareup.retrofit2:retrofit:2.4.0 复制代码Retrofit2底层基于OkHttp3&#xff0c;是对利用OkHttp3请求网络的一种封装&…

JEESZ分布式系统环境安装

1.环境准备1.开发工具&#xff1a; Eclipse IDE&#xff08;建议使用高一点的版本&#xff09;2.JDK版本&#xff1a;JDK1.73.项目管理&#xff1a; Maven3.1.12.安装步骤 1.安装jdk1.7并配置环境变量&#xff08;相信大家都会做&#xff0c;这里不再做重复的说明&#xff09…

QPrinter设置页面边距setPageMargins不生效问题

QPrinter设置页面边距setPageMargins不生效问题 在使用QPrinter绘制pdf文件过程中&#xff0c;尤其是在打印预览时&#xff0c;发现在电脑安装了打印机驱动时&#xff0c;页面(page)总是无法铺满纸张&#xff08;paper)&#xff0c;周围留了50个像素的空白 采用&#xff1a;pr…

自适应布局的折线图,柱状图以及天气预报折线图

原文:自适应布局的折线图&#xff0c;柱状图以及天气预报折线图版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/gao110753245/article/details/78195942 SmartChart 本项目是个人开发所用的一套常用框架&#xff0c;里面包含…