【问题标题】:Curl works outside vm but not insideCurl 在 vm 外部工作,但不在内部工作
【发布时间】:2018-07-30 22:32:07
【问题描述】:

我尝试了以下方法:

将 mtu 设置为 1400

将 vagrant 降级到 1.8.7 和 VirtualBox 到 5.1.38

关闭主机 (osx) 和来宾 (Ubuntu) 上的防火墙

在来宾操作系统中关闭 iptables

Ping 有效,但任何需要 ssl 握手的操作都会失败,包括 curl 和 php 中的 file_get_contents 超时

例子:

vagrant@scotchbox:~$ openssl s_client -connect www.google.com:443 -prexit
CONNECTED(00000003)

但是使用 curl:

vagrant@scotchbox:~$ curl -iv https://www.google.com
* Rebuilt URL to: https://www.google.com/
*   Trying 216.58.194.36...
* Connected to www.google.com (216.58.194.36) port 443 (#0)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 694 certificates in /etc/ssl/certs
* ALPN, offering http/1.1

此时它只是挂起。

PHP 也存在建立握手的问题:

Warning: file_get_contents(): SSL: Handshake timed out

【问题讨论】:

  • 你试过使用 wget 吗?还要确保导致问题的 TLS:在 curl 命令上使用 --insecure 以跳过证书检查...
  • 我已尝试使用 -k 和 --insecure ,但它仍然挂起。 wget https://www.google.com 也解析并连接,然后它就挂在那里
  • 您能否将 --trace-ascii 添加到 curl 命令中,以便我可以更深入地了解正在发生的事情。 (可能太多,无法添加到上面的问题中)以及您使用的是什么风格的 Linux?什么版本的卷曲?此外,如果您向我提供有关 vagrant 设置的任何其他信息,我可以复制您的构建以最终解决它。
  • 几乎使用 scotchbox,无需额外修改。

标签: ssl vagrant virtualbox


【解决方案1】:

我昨天偶然发现了同样的问题。我现在正在使用自己的证书来处理 HTTPS 代理。主机笔记本电脑配置了此证书,但 VirtualBox 来宾没有。这对所有客人都有效。解决方法很简单:

  1. 在您的主机浏览器中查找并导出代理的证书。我用的是火狐,这真的很简单
  2. 将证书文件传输给访客
  3. 运行:sudo cp /etc/pki/ca-trust/source/anchors/
  4. 最后运行:sudo update-ca-trust。

(如果您运行的是 Windows 客户机,我不知道这些命令。)

【讨论】:

  • 很有趣,我会试一试。如果它有效,我可以在 scotchbox 的 github 问题中引用它,看看他们是否可以将它包含在他们的文档中。非常感谢!
  • 看来我没有可用的代理ca证书,所以无法测试此方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多