35

我正在尝试使用 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,
    );

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

4

7 回答 7

51

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

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

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

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

于 2009-02-06T18:09:23.090 回答
23

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

  1. 从这里下载带有根证书的文件:http: //curl.haxx.se/docs/caextract.html
  2. 添加到 php.ini:

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

这很神奇,CURL 现在可以验证证书。

(据我所知,Linux 上没有这样的问题,至少在 Ubuntu 上是这样)

于 2012-11-26T12:22:47.687 回答
6

即使在遵循关于 SO. 的建议之后。您可能仍然会遇到以下错误的问题:

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

问题出在 SSL 版本上。将以下内容用于版本 3

curl_setopt($ch, CURLOPT_SSLVERSION,3)

我假设您也启用了对等和主机的验证,并指向一个实际的证书文件。例如。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
于 2013-01-18T16:39:31.277 回答
2

这是 openssl 和 VeriSign 的“问题”。

我遇到了类似的问题,我的 openssl 缺少 VeriSign 用于签署服务器证书的中间 ssl 证书。

https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657

我必须将这些中间证书从 VeriSign 主页或 Firefox cert-database-export 导入到我的本地 ca-certificates 列表中,在此步骤之后,我能够使用 wget/curl 来使用受保护的连接而不会出现任何错误。

于 2010-06-10T11:51:24.073 回答
0

如果它是开发人员机器 - 您也可以在您的系统中添加此证书。像这样的东西 - https://www.globalsign.com/support/intermediate/intermediate_windows.php 它适用于 WinXP,但它也适用于其他版本的 Windows。

于 2012-12-07T14:52:49.950 回答
-1

您没有发送 SSL 证书。SSL 证书似乎存在问题,因为它安装在您正在联系的主机上。使用选项 -k 或 --insecure 来解决投诉。

啊。见瑞安格雷厄姆的回答

于 2009-02-06T18:11:01.670 回答
-1

这显然是在 openssl 错误上。通过限制可用密码列表,可以在 /etc/tomcat7/server.xml 中配置 Tomcat 以解决此问题:

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>
于 2014-04-28T11:38:26.133 回答