Mac系统下curl/wget遇SSL访问异常,Chrome可正常访问HTTPS页面
看你贴的curl verbose输出,核心问题一眼就能看出来:Connected to www.google.com (::1) port 443——你的curl把谷歌域名解析到了本地回环地址(::1),这肯定连不上正常的HTTPS服务,而Chrome用了不同的解析逻辑或者绕过了这个错误配置,所以能正常工作。下面是一步步排查修复的方法:
第一步:检查hosts文件是否被篡改
Mac的hosts文件会强制指定域名的IP映射,大概率是这里出了问题。打开终端执行:sudo nano /etc/hosts看看里面有没有类似
::1 www.google.com或者127.0.0.1 www.google.com的条目,如果有,把这行前面加个#注释掉,或者直接删除。修改完按Ctrl+O保存,Ctrl+X退出编辑器,然后再测试curl。第二步:重置系统DNS缓存并检查DNS设置
Chrome可能启用了自己的安全DNS(比如Google Public DNS或者Cloudflare DNS),而curl/wget依赖系统DNS解析。先刷新系统DNS缓存:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder然后打开「系统设置」→「网络」→ 选中当前使用的网络(Wi-Fi/以太网)→ 点击「高级」→「DNS」,看看列表里的DNS服务器是否正常,建议添加几个公共DNS(比如
8.8.8.8、1.1.1.1),把异常的DNS地址删掉。第三步:排查代理设置冲突
Chrome可能单独配置了代理,或者系统代理有问题但Chrome绕过了它。先检查系统代理:打开「系统设置」→「网络」→「高级」→「代理」,看看有没有开启「自动代理配置」或者「手动代理」,如果有,先暂时关掉,再测试curl。
另外,也可以直接让curl绕过代理测试,确认是不是代理的锅:curl --noproxy '*' --verbose https://www.google.com/如果这个命令能成功,说明你需要调整系统代理或者curl的代理配置。
第四步:检查curl的自定义配置
curl会读取用户目录下的~/.curlrc或者系统级的/etc/curlrc配置文件,里面可能有异常的代理、DNS或者证书设置。先把用户级的配置文件重命名备份:mv ~/.curlrc ~/.curlrc.bak然后再测试curl,如果恢复正常,说明之前的
~/.curlrc有问题,你可以打开备份文件排查里面的配置项。
内容的提问来源于stack exchange,提问作者fatdragon

