为什么我们在 windows 中需要 CURLOPT_SSL_VERIFYPEER

Why we need CURLOPT_SSL_VERIFYPEER in windows

我将稍微解释一下我的脚本,以便您理解我的问题。

基本上我做了一个脚本来检查 SOCKS5 是 live 还是 dead

当我在 Linux VPSiMac 上测试我的脚本时,它工作得很好,但是当我在 Windows 和 wampserver 上测试它时,它没有工作,直到我将此行添加到 cURL

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

任何人都可以向我解释为什么我在 Windows 中需要这一行而在 Linux 服务器上不需要它吗?

SSL Certificates 上的此 cURL 手册页描述了 证书验证 连接到 SSL/TLS 安全的过程主持人。

您需要在 Windows 上将 CURLOPT_SSL_VERIFYPEER 设置为 false 的原因是它用于验证证书的 CA 包丢失(或者没有编译默认路径到 cURL 中,因此您需要明确定义它)。

您可以使用 curl.cainfo 指令在 php.ini 中配置它,或者在运行时使用:

指定它
curl_setopt($curl, CURLOPT_CAFILE, 'C:/path/to/ca-bundle.crt');

如果您没有副本,请获取最近的一份 here

虽然禁用对等验证是一种解决方法,但这可能是不安全的,因为您正在禁用确保您与您认为的站点安全通信的检查。

任何人都可以生成自签名证书来模拟域,但如果无法验证证书,浏览器或客户端(如 cURL)将失败,除非您忽略或绕过此检查(即 CURLOPT_SSL_VERIFYPEER =假)。

Drew010 的回答是正确的。我只想补充一点,您遇到的问题与其说是 Windows v Linux 问题,不如说是两种环境不同。您可能会遇到两个 Linux 环境之间的相同差异(我遇到了这个确切的问题),角色颠倒了(在 Windows 中有效,但在 Linux 中无效),等等