在开发板上如何处理curl: (60) SSL certificate problem

目录

引言

问题解析

解决方法

跳过证书验证

采用证书认证

结语


引言

最近一直推荐学生们在课程实验中使用curl及其libcurl。curl 是一个强大的命令行工具,用于在命令行中进行数据传输。它支持多种协议,如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。在网络开发、系统管理和数据抓取等领域被广泛应用。例如,通过 curl 命令可以方便地向服务器发送 GET、POST 等请求,获取网页内容、上传文件等。

而 libcurl 则是与之紧密相关的一个重要库。它为开发者提供了在程序中实现网络传输功能的强大能力,广泛应用于各种编程语言和项目中。

但是在x210开发板上使用curl访问https网站时遇到下面的问题:

​curl: (60) SSL certificate problem: unable to get local issuer certificateMore details here: https://curl.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
​

今天就分享一下如何解决这个问题。 

问题解析

在嵌入式开发板上运行curl时出现SSL certificate problem: unable to get local issuer certificate错误,这意味着curl无法验证服务器证书的合法性,因为它找不到用于验证服务器证书的颁发者证书。在官方文档curl - SSL CA Certificates中详细解释了出现问题的原因和几种解决方法。

解决方法

跳过证书验证

在命令行使用-k--insecure选项告诉curl不要验证对等方。但在生产环境中,跳过验证会带来安全风险,因为这会使连接容易受到中间人攻击,所以仅适用于实验或开发阶段。

如果是在程序中,可以加入如下的语句禁用本地证书校验:

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);

采用证书认证

跳过证书验证虽然可以简单地解决问题,但是它有安全隐患。比较好的方法是获得CA证书。下面以Windows 11自带的浏览器为例介绍一下相关步骤:

在浏览器的地址栏可以找到一个锁的标志。

点击锁的标志会显示网站的安全信息:

点击“连接安全”,显示网站的安全信息,在这个小窗口的右上角可以看到一个证书的图标。

点击证书图标后进入证书查看器。

在证书查看器中切换到详细信息。

点击下方的导出按钮,可以将证书保存为crt格式。

 在主机的Linux上用下面的命令将crt格式转换为pem格式:

openssl  x509  -in  baidu_com.crt  -out  baidu_com.pem

然后将pem格式拷贝到开发板上。 

然后使用下面的命令测试证书:

./curl -v --cacert baidu_com.pem https://www.baidu.com

 如果遇到如下错误信息:curl和curl: (60) SSL certificate problem: certificate is not yet valid,说明开发板的时间不对,可以在开发板上用如下命令设置时间:

date -s "2025-04-29 14:30:00"

再执行上面的语句就应该可以正常访问https网站了。

 

结语

希望以上内容能帮助你更好地理解和解决 curl 相关的问题。如果你还有其他疑问,欢迎继续探索和交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSRF请求伪造

该漏洞主要是关乎于用户,告诫用户不可乱点击链接,提升自我防范,才能不落入Hacker布置的陷阱! 1. cookie与session 简单理解一下两者作用 1.1. 🍪 Cookie:就像超市的会员卡 存储位置:你钱包里…

Python循环与遍历详解:从入门到进阶

在Python编程中,循环和遍历是最基础但极其重要的知识点。理解并掌握这部分内容,是编写高效、清晰代码的前提。本文将从for循环和while循环的基本语法出发,逐步深入探讨range、enumerate、zip、列表推导式、字典遍历等Python中常见的遍历技巧&…

Python-MCPServer开发

Python-MCPServer开发 使用FastMCP开发【SSE模式的MCPServer】,熟悉【McpServer编码过程】【McpServer调试方法】 1-核心知识点 1-熟悉【SSE模式的MCPServer】开发2-熟悉【stdio模式的MCPServer】开发3-熟悉【启动MCPServer】的三种方式 3.1-直接启动:python mcp_s…

高级项目管理

在信息系统项目管理工作中,组织管理者和项目管理者,有时还会面临多项目的管理,或组织级的项目管理、项目的量化管理等课题。 其中,项目集管理、项目组合管理和组织级项目管理,为多项目管理和组织级管理提供有效指导&a…

tarjan缩点+强联通分量

【模板】缩点https://www.luogu.com.cn/problem/P3387 首先我们要理解这道题为什么要用缩点 题目说的是有向图,如果无环的话就可以用DP来解决了 由于可以走重复的点,所以一个环上的点可以看成是一个点,它的点权就等于该环上所有点的点权之…

OSCP:获取全交互式 Windows 反向 Shell

简介 在本文中,我们将探讨获取完全交互式 Windows 反向 Shell 的各种方法,从利用内置工具到采用先进技术以获得更好的控制和功能。 通过 Invoke-ConPtyShell 我获取完全交互式 Windows 反向 Shell 的首选方法是通过 Invoke-ConPtyShell 脚本。当 Wind…

免费超好用的电脑操控局域网内的手机(多台,无线)

使用 第一步 解压QtScrcpy压缩包,并运行QtScrcpy.exe 第二步 2.1 手机开启开发者模式(设置>关于本机>版本信息>连点10下“版本号”) 2.2 开启 USB调试 和 无线调试(设置>开发者选项> USB调试 无线调试&#xf…

Go语言内存管理

本章节,就来学习一下go语言的内存模型,看一下内存的分配,存储都是如何实现的,与此同时,在正式开始今天的主题之前,首先先来学习操作系统基于这一方面的内容,来看看是如何管理内存的吧 本章及节…

【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据

‌启动临时 MongoDB 容器、挂载数据卷运行数据库服务,并通过备份文件恢复数据 1.命令分解与功能说明1.1.启动一个临时 MongoDB 容器‌,并进入交互式终端(1)执行命令(2)实现功能‌(3)…

【最新 MCP 战神手册 08】工具使用详解:实现 AI 行动

文章目录 1. 开始啦!2. 第一部分:设计高效且安全的工具3. 第二部分:定义工具蓝图——参数、输出与约束条件4. 第三部分:弥合差距:LLM 兼容性(函数调用)5. 第四部分:实施与测试的最佳实践1. 开始啦! 在前几章中,我们将工具介绍为 AI 模型在 MCP 客户端引导下向 MCP 服…

介绍 IntelliJ IDEA 快捷键操作

IntelliJ IDEA 快捷键操作 1. 编辑与导航2. 查找与替换3. 调试与运行4. 导航与视图5. 重构与生成6. 高级快捷键(提高效率)注意事项 IntelliJ IDEA 是一款功能强大的集成开发环境,掌握其常用快捷键可以显著提升开发效率。但是有些小伙伴并不清…

Javascript 中作用域的理解?

一、作用域的类型 1. 全局作用域(公司大门外) 范围:整个 JavaScript 文件变量:像贴在公告栏上的信息,所有人可见例子:const companyName "阿里"; // 全局变量,任何地方都能访问 fu…

Leetcode刷题记录22——滑动窗口最大值

题源:https://leetcode.cn/problems/sliding-window-maximum/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述: 思路一: 暴力遍历法,通过一个长度为k的滑动窗口遍历nums,将其中最大的数依次记…

Apache Flink的架构设计与运行流程说明

在大数据领域,实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控,从物联网设备的实时告警到社交平台的热点追踪,企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中&a…

经典算法 最长单调递增子序列

最长单调递增子序列 问题描述 找出由n个数组成的序列的最长单调递增子序列。 示例输入 9 2 1 5 3 6 4 8 9 7示例输出 5示例输入 6 5 6 7 1 2 8示例输出 4c代码(动态规划 O(n^2)) #include<bits/stdc.h>using namespace std;int main() {int n, ans 0;cin >&g…

【语法】C++继承中遇到的问题及解决方法

目录 1.子类构造函数中初始化父类成员 2.子类显式调用父类的析构函数 第一种说法&#xff1a;重定义 反驳&#xff1a; 第二种说法&#xff1a;operator~ 3.因编译器版本过低而出现错误 贴主在学习C的继承时&#xff0c;遇到了很多问题&#xff0c;觉得很变态&#xff0c…

前缀和 后缀和 --- 寻找数组的中心下标

题目链接 寻找数组的中心下标 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为…

NVIDIA --- 端到端自动驾驶

前言 参加了NVIDIA 高级辅助驾驶开发者实验室的活动&#xff0c;本次活动基于 NVIDIA 汽车行业的端到端解决方案——DRIVE AGX™ 平台&#xff0c;实现高级别智能和安全性的软硬件开发工具和 AV 基础设施。并且NVIDIA自动驾驶实验室推出了一系列自动驾驶算法最新的前沿研究视频…

SQL实战:03之SQL中的递归查询

文章目录 概述SQL 中的递归实现题目一:分析组织层级题解题目二:树节点求解题解步骤一&#xff1a;通过递归查询出每个节点的上级节点和下级节点分布步骤二&#xff1a;分组统计 概述 最近刷题时遇到了一道需要根据组织层级来统计各个层级的一些数据&#xff0c;当时碰到时的第…

MySQL 语法与基础完全指南

MySQL 是最流行的开源关系型数据库管理系统之一&#xff0c;广泛应用于 Web 应用程序开发。本文将全面介绍 MySQL 的基础知识和完整语法结构。 一、MySQL 基础概念 1. 数据库基本术语 数据库(Database): 存储数据的集合 表(Table): 数据以表格形式组织 列(Column): 表中的一…