付费求解 curl ssl/tls 突发状况,请求 https 站点均失败。

2021-11-01 12:46:26 +08:00
 hanssx

付费 30 红包送给第一位帮助解决此问题的 V 友,以聊表心意。

环境

物理机 Windows 10

C:\Windows\system32>curl -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

虚拟机 Linux Mint 19.3 ,等价 Ubuntu 18.04 LTS

# mint @ mint-virtual-machine in ~ [11:38:30] 
$ curl -V
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

在虚拟机中,前几天下午用 pycharm 的时候突然弹出个公司的证书,不知道为啥,就正常写代码中。

后面尝试发现所有 https 站点连接都有问题,比如下图中的某度,

按照 curl 问题指引 https://curl.se/docs/sslcerts.html ,下载 cacert.pem ,运行依然没有效果

同时物理机上面的 windows curl 也不好使了

忽略掉证书是可以的,比如curl -v https://www.baidu.com --insecure 但是这并不是解决方案啊,另外其他使用 HTTPS 的工具好像也连不上 HTTPS 站点了,像是系统问题?但是实在想不明白物理机和虚拟机同时不能请求 HTTPS 的原因是啥。

2063 次点击
所在节点    HTTP
21 条回复
dzdh
2021-11-01 12:50:32 +08:00
机器时间对不对
zu1k
2021-11-01 12:54:01 +08:00
你这个证书与我获取到的不一样,证书签发者有公司名?如果有,是被中间人了,可能你们公司要搞监控了
hanssx
2021-11-01 12:54:30 +08:00
@dzdh 看了一下,物理机和虚拟机时间有差 20 秒,物理机和手机时间是一样的,应该不是时间的问题吧,时间会影响 HTTPS 吗?
![机器时间]( )
hanssx
2021-11-01 12:56:15 +08:00
@zu1k 有公司名,就是我们公司的名字,我给打码了,我是在虚拟机里面用 Pycharm 的时候,在 Pycharm 中弹出的这个公司证书,但是为啥物理机 Windows 的 curl 也坏了,而且和虚拟机的状况是一样的呢?
dzdh
2021-11-01 12:56:37 +08:00
我是搜的 [吊销功能无法检查证书是否吊销] 可能是由于时间问题导致的。

另外你浏览器能正常访问 https 吗,公司里除了你别人有问题吗,如果浏览器访问提示证书有问题的话把有问题的证书截个图放出来。
jsyzdej
2021-11-01 12:57:36 +08:00
可能你们公司搞中间人了,你试试物理机拔掉网线,用手机流量上网会不会报错
zu1k
2021-11-01 12:58:33 +08:00
@hanssx 可以确定,公司劫持了所有流量,想要搞监控。鼓估计过几天网络部门就要让你们安装并信任公司证书或者安装某特定软件了
jimages
2021-11-01 13:00:13 +08:00
怀疑是,你需要信任公司的证书,公司对所有 https 流量要审计,所有相当于 MITT 了你的 https 流量,因此需要你手动默认完全信任你的公司证书。
keyfunc
2021-11-01 13:00:25 +08:00
你们肯定上过什么监控设备了,因为 https 无法解析,所以自签了证书劫持所有流量,到客户端收到的证书就是你们自签发的证书了,当然会报错。
hanssx
2021-11-01 13:00:59 +08:00
@dzdh 已经补充了,浏览器正常访问 https ,比如 baidu.com/google.com 均无问题,目前是 curl 有问题,然后我一直用来同步的 Insync( https://www.insynchq.com/)不工作了,是 curl 出现问题之后不工作的,我目测应该和 Insync 没关系,它就是用来同步的。
对了,SSH 好像连不到 Hong Kong VPS 了,公司内部开发机可以连上,我之前是用本地代理连 Hong Kong VPS 的。
```
Looking up proxy server '127.0.0.1'...
Host '127.0.0.1' resolved to 127.0.0.1.
Connecting to 127.0.0.1:7890...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

```
oott123
2021-11-01 13:01:50 +08:00
明显公司监控哇

echo | openssl s_client -connect example.com:443 | openssl x509 -noout -text
hanssx
2021-11-01 13:03:53 +08:00
@oott123 师傅,这报的错和 curl 一个样。。
```
$ echo | openssl s_client -connect example.com:443 | openssl x509 -noout -text
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, CN = www.example.org
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, CN = www.example.org
verify error:num=21:unable to verify the first certificate
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, CN = www.example.org
verify return:1
DONE
...(后面是证书信息,暂时省略)
```
keyfunc
2021-11-01 13:06:56 +08:00
@hanssx 你可以找台有问题的电脑,然后用手机热点上网,看看还能不能复现问题
oott123
2021-11-01 13:09:59 +08:00
@hanssx 有用的就是证书信息咯,你如果看不明白,可以

echo | openssl s_client -connect 这里是地址:443 > cert.cer

把证书导出出来,用 Windows 或者其它的 GUI 工具看。我觉得大概是你公司签发了一个字段和原始证书一样、但是由自己 CA 签名的证书。浏览器正常,是因为贵司的管理软件,将该 CA 加入了物理机系统的信任存储区(你可以在浏览器点小锁图标查看证书看看信任链),Chrome 浏览器是用系统存储区的( Firefox 不是,但贵司的管理工具也有可能将 CA 加入它的存储区)。curl 之类有自己的证书存储,所以没有信任到。
hanssx
2021-11-01 13:42:13 +08:00
@keyfunc ![连手机热点依然有问题]( )

我有点慌了,是不是被黑了。。。
zu1k
2021-11-01 13:49:15 +08:00
执行 route print 看一下本机路由
hanssx
2021-11-01 13:50:52 +08:00
@oott123 师傅,证书信任链是下面的证书路径吧,公司确实是最顶端
![证书路径]( )

用 openssl 命令返回的证书,签发者也是公司的 CA 。。。
Issuer: C = EN, CN = <打码字段> Enterprise Security SSL CA
keyfunc
2021-11-01 14:00:35 +08:00
@hanssx 这样的证书链 100% 就是公司安装了监控导致的,如果手机热点也是这个问题的话,应该是 Windows 安装了什么客户端,比如上网客户端之类的,Windows 使用浏览器应该不报错,你可以尝试用 firefox 访问百度,理论上会报错。
hanssx
2021-11-01 14:03:13 +08:00
@oott123 师傅,我刚才用 Firefox 看了一眼 baidu 的证书,它好像是常规的那种,其他用 chrome 、curl 的都是公司 CA 签发的。
![firefox 上面的证书]( )
这是咋个意思呢,也就是说正常的证书公司也会放过?公司是改流量了吗?
hanssx
2021-11-01 14:20:05 +08:00
@zu1k 师傅是第一个说是监控和中间人相关的,烦请加我微信我发 30 红包。

@oott123 师傅说得很详细,学到很多,烦请加我微信我发 30 红包。


微信:lpohai ,第一个字母是小写的 L ,微信图像和 V 站同。

再次感谢所有师傅。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/812102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX