目录
引言
问题解析
解决方法
跳过证书验证
采用证书认证
结语
引言
最近一直推荐学生们在课程实验中使用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
相关的问题。如果你还有其他疑问,欢迎继续探索和交流。