【Linux学习笔记】探讨curl无法访问https网站的问题

背景:

Ubuntu16.04

手动编译了openss和curl(见前两篇文章),但curl无法访问https网站。

虽然可以用参数关掉证书验证来实现访问,但总觉得方法不完美。

查找了很多资料,这个过程中,也对证书有了一点表面的认识,记录如下。

问题:

在命令行中执行:

root@4fce076edf95:~# curl -v https://wwww.baidu.com
* Rebuilt URL to: https://wwww.baidu.com/
*   Trying 123.125.114.144...
* TCP_NODELAY set
* Connected to wwww.baidu.com (123.125.114.144) port 443 (#0)
* ALPN, offering http/1.1
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl 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.

原理:

一个https网站,会提供一个证书,来证明自己是合法网站。

但是这个证书是真是假呢,客户端本身还是不能识别的,需要让一个“权威的第三方”来评判。

各种浏览器中,都会内置一些可信的第三方的证书,也就是“受信任的根证书颁发机构”。

当浏览器从某个https服务器中拿到一个证书后,会找到证书里记录的根证书颁发机构,到那里去验证一下。

例如:

我们打开百度首页,会看到地址栏中的安全提示,点开,会看到证书信息,如下图。

这里的GlobalSign就是一个“权威的第三方”

所以,为了能验证我们要访问网站的证书是真是假,就需要我们先预置一些根证书。

对策:

先到curl的官网上去下载一个包含很多“权威第三方”信息的证书:

https://curl.haxx.se/ca/cacert.pem

可以在win系统上下载,复制到linux中去。

然后在curl命令中指定参数:

--cacert cacert.pem

root@4fce076edf95:~# curl -v --cacert cacert.pem https://wwww.baidu.com
......
*  SSL certificate verify ok.
......

编程:

如果使用libcurl来实现自己的http客户端,

需要增加如下一行代码,来达到访问https网站的目的

curl_easy_setopt(curl, CURLOPT_CAINFO, "./cacert.pem");

当然,这是一个比较简陋的写法,

最终在运行时,pem作为一个独立的文件,是不是可能被手动替换掉,最终实现中间人攻击?

我目前还不是特别懂。

以后再深入了解后,回来补充此文章。

参考:

curl官网,上面错误提示中给出的一个网址,但讲的比较含糊

https://curl.haxx.se/docs/sslcerts.html

下面这篇文章对证书做了比较完整的解释:

https://linux.cn/article-7289-1.html

一些证书格式的介绍和转换的方法:

https://blog.csdn.net/xiangguiwang/article/details/76400805

DigiNotar:一家“权威第三方”失信而导致破产的故事

https://cnzhx.net/blog/diginotar-ca-servers-been-compromised/

http://m.chinabyte.com/sec/325/12155825_gfh.shtml

这篇文章好像说的和本文是一件事:

https://www.cnblogs.com/cposture/p/9029014.html

零碎的一些信息

https://blog.csdn.net/lemonzone2010/article/details/46515521

https://serverfault.com/questions/394815/how-to-update-curl-ca-bundle-on-redhat%5D

 

  • 1
    点赞
  • 1
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">期末</span><span style="font-size:14px;background-color:#fbeeb8;">考点</span><span style="font-size:14px;">都对应</span><span style="font-size:14px;background-color:#fbeeb8;">详解视频</span><span style="font-size:14px;">,</span><span style="font-size:14px;"><span style="color:#e03e2d;">基础阶段</span></span><span style="font-size:14px;">内容全面,语言通俗易懂(翻译书中的语言为</span><span style="font-size:14px;background-color:#fbeeb8;">人话)</span><span style="font-size:14px;">,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">老师精心研究</span><span style="font-size:14px;background-color:#fbeeb8;">百份</span><span style="font-size:14px;">考卷,总结每一个考点,同时结合你肯定可以听懂的骚话,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;background-color:#fbeeb8;">扫清你的数据库系统盲区</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;"><span style="color:#e03e2d;">真题阶段</span></span><span style="font-size:14px;">为你提供</span><span style="font-size:14px;background-color:#fbeeb8;">解题思路</span><span style="font-size:14px;">,培养你的</span><span style="font-size:14px;background-color:#fbeeb8;">解题思维</span><span style="font-size:14px;">,同时</span><span style="font-size:14px;background-color:#fbeeb8;">点明考点</span><span style="font-size:14px;">,结合文档进行重点解读,加深你的印象.</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;color:#3598db;">只为你的高分,我们交个朋友!让每位学生都可以学的起!!</span> </h4> <p> <span style="font-size:14px;color:#3598db;"><img src="https://img-bss.csdnimg.cn/202103040423318088.png" alt="" width="788" height="450" /></span> </p>
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值