【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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值