You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTTPS请求无限挂起求助:API认证时HTTPS调用进程无响应

解决HTTPS请求无限挂起的排查方案

这种HTTPS请求挂起的情况我碰到过不少,结合你的环境(通过SSH访问的服务器上的虚拟机)和curl verbose输出,大概率是网络层面的端口阻塞或者SSL/TLS握手阶段的异常,给你几个一步步排查的实用方案:

1. 优先排查防火墙与安全组规则

HTTP能正常访问但HTTPS不行,最常见的原因就是443端口被限制了:

  • 虚拟机本地防火墙:检查是否允许出站443端口,执行命令:
    iptables -L OUTPUT -n | grep 443
    # 或者用ufw的话
    ufw status
    
    如果没有允许规则,添加一条:
    ufw allow out 443/tcp
    # 或者iptables
    iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
    
  • 宿主机防火墙:因为你的虚拟机跑在远程服务器上,宿主机可能限制了虚拟机的出站HTTPS流量,需要联系服务器管理员检查宿主机的iptables/ufw规则,确认443端口的出站权限。
  • 云服务商安全组(若适用):如果宿主机是云服务器,还要检查云平台的安全组配置,确保虚拟机所在的子网允许出站443端口流量。

2. 检查代理配置是否异常

有时候环境里的代理设置会导致HTTPS请求卡住:

  • 先查看当前环境变量中的代理配置:
    echo $HTTP_PROXY $HTTPS_PROXY
    
    如果发现有不正确的代理地址,或者不需要代理的话,清空这些变量:
    unset HTTP_PROXY HTTPS_PROXY
    
  • 同时检查curl的全局或用户配置文件:~/.curlrc、/etc/curlrc,如果里面有proxy相关的配置行,先注释掉再重试curl命令。

3. 用OpenSSL测试SSL/TLS握手细节

直接用openssl工具测试握手过程,能帮你定位是网络问题还是SSL层面的问题:

openssl s_client -connect www.stackoverflow.com:443 -verbose
  • 如果这个命令也挂起,基本可以确定是网络连通性问题(比如443端口被拦截);
  • 如果能正常输出完整的握手日志,那可能是curl的版本或配置问题,可以尝试指定TLS版本重试:
    curl -v --tlsv1.2 https://www.stackoverflow.com
    

4. 验证虚拟机网络路由与连通性

确认虚拟机的基础网络配置是否正常:

  • 查看路由表,确认默认网关正确:
    route -n
    
  • 先ping默认网关,再ping公共DNS(比如8.8.8.8),如果ping不通,说明虚拟机的基础网络连通性有问题,需要检查虚拟机的网络模式(桥接/NAT)是否配置正确。
  • 也可以直接用IP访问HTTPS试试,排除DNS解析的潜在问题:
    curl -v https://216.58.202.4
    

5. 宿主机抓包排查流量走向

如果前面的步骤都没找到问题,可以在宿主机上抓包,观察虚拟机的HTTPS流量是否正常转发:

# 在宿主机执行,抓取443端口的流量
tcpdump -i any port 443

然后在虚拟机里执行curl命令,观察宿主机是否收到请求数据包,以及是否有返回流量:

  • 如果只有请求包没有返回包,说明外部网络拦截了443流量;
  • 如果宿主机根本没收到请求包,说明虚拟机到宿主机的网络链路有问题,需要检查虚拟机的网络桥接/NAT配置。

内容的提问来源于stack exchange,提问作者trenan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:58:19