使用 CURL 读取 SSL 页面 (php)

2022-08-30 13:21:44

我正在尝试使用php和curl库下载安全(使用https)网页的内容。

但是,读取失败,我收到错误60:“SSL证书问题,验证CA证书是否正常。

还有“详细信息:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”

所以。。。相当不言自明的错误消息。

我的问题是:我如何发送SSL证书(正确的证书?)并让此页面进行验证并让我进入?

另外,这是我的选项数组,以防您想知道:

    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYHOST => 1,
    );

任何建议都会很棒,安德鲁


答案 1

听起来你可能误解了这个错误。在我看来,您正在连接到的网站是自签名的或其他一些常见问题。就像通常的浏览器警告一样,最简单的解决方法是禁用检查。

您需要设置 和 。这应该禁用两个主要检查。它们可能不是必需的,但这至少应该让你继续前进。CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOSTFALSE

需要明确的是,这将禁用旨在保护您的功能。仅当您已通过其他方式验证证书和服务器时,才执行此操作。

有关 PHP 站点的更多信息: curl_setopt()


答案 2

如果要使用SSL对等验证(关闭它并不总是好主意),则可以在Windows上对所有应用程序使用下一个解决方案:

  1. 从此处下载包含根证书的文件:http://curl.haxx.se/docs/caextract.html
  2. 添加到 php.ini:

curl.cainfo=C:/path/to/cacert.pem

这都是魔术,CURL现在可以验证证书。

(因为我知道在Linux上没有这样的问题,至少在Ubuntu上)


推荐