为什么我们在 windows 中需要 CURLOPT_SSL_VERIFYPEER
Why we need CURLOPT_SSL_VERIFYPEER in windows
我将稍微解释一下我的脚本,以便您理解我的问题。
基本上我做了一个脚本来检查 SOCKS5 是 live
还是 dead
。
当我在 Linux VPS
和 iMac
上测试我的脚本时,它工作得很好,但是当我在 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 中无效),等等
我将稍微解释一下我的脚本,以便您理解我的问题。
基本上我做了一个脚本来检查 SOCKS5 是 live
还是 dead
。
当我在 Linux VPS
和 iMac
上测试我的脚本时,它工作得很好,但是当我在 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 中无效),等等