V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
hanssx
V2EX  ›  HTTP

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

  •  
  •   hanssx · 87 天前 · 1001 次点击
    这是一个创建于 87 天前的主题,其中的信息可能已经有所发展或是发生改变。

    付费 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 站点连接都有问题,比如下图中的某度, Imgur

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

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

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

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

    另外你浏览器能正常访问 https 吗,公司里除了你别人有问题吗,如果浏览器访问提示证书有问题的话把有问题的证书截个图放出来。
    jsyzdej
        6
    jsyzdej  
       87 天前 via Android
    可能你们公司搞中间人了,你试试物理机拔掉网线,用手机流量上网会不会报错
    zu1k
        7
    zu1k  
       87 天前 via Android
    @hanssx 可以确定,公司劫持了所有流量,想要搞监控。鼓估计过几天网络部门就要让你们安装并信任公司证书或者安装某特定软件了
    jimages
        8
    jimages  
       87 天前
    怀疑是,你需要信任公司的证书,公司对所有 https 流量要审计,所有相当于 MITT 了你的 https 流量,因此需要你手动默认完全信任你的公司证书。
    keyfunc
        9
    keyfunc  
       87 天前
    你们肯定上过什么监控设备了,因为 https 无法解析,所以自签了证书劫持所有流量,到客户端收到的证书就是你们自签发的证书了,当然会报错。
    hanssx
        10
    hanssx  
    OP
       87 天前
    @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
        11
    oott123  
       87 天前
    明显公司监控哇

    echo | openssl s_client -connect example.com:443 | openssl x509 -noout -text
    hanssx
        12
    hanssx  
    OP
       87 天前
    @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
        13
    keyfunc  
       87 天前
    @hanssx 你可以找台有问题的电脑,然后用手机热点上网,看看还能不能复现问题
    oott123
        14
    oott123  
       87 天前   ❤️ 1
    @hanssx 有用的就是证书信息咯,你如果看不明白,可以

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

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

    我有点慌了,是不是被黑了。。。
    zu1k
        16
    zu1k  
       87 天前 via Android
    执行 route print 看一下本机路由
    hanssx
        17
    hanssx  
    OP
       87 天前
    @oott123 师傅,证书信任链是下面的证书路径吧,公司确实是最顶端
    ![证书路径]( )

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

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


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

    再次感谢所有师傅。
    zu1k
        21
    zu1k  
       86 天前 via Android   ❤️ 1
    @hanssx 我不要,恰好我近期也在做 MITM 相关,借贴宣传一下,https://github.com/zu1k/good-mitm ,用 MITM 技术来为自己服务
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4153 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:25 · PVG 14:25 · LAX 22:25 · JFK 01:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.