用CURL读取SSL页面(php)

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

但是,读取失败,我得到错误60:“SSL证书问题,请validationCA证书是否正常。”

也“详细信息:SSL3_GET_SERVER_CERTIFICATE:证书validation失败”

所以…漂亮的自我解释错误消息。

我的问题是:我如何发送一个SSL证书(正确的),并得到这个页面来validation它,让我在?

另外,这里是我的选项数组,如果你想知道:

$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:xxx) Gecko/20041107 Firefox/xx", // 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, ); 

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

这听起来像你可能会误解错误。 它看起来像我连接到的网站是自签名或一些其他常见问题。 就像通常的浏览器警告,你最容易的解决办法是禁用检查。

您需要将CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOSTFALSE 。 这应该禁用两个主要的检查。 他们可能不是都需要,但这至less应该让你去。

要清楚,这将禁用旨在保护您的function。 只有在通过其他方式validation了证书和服务器的情况下才能执行此操作。

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

如果您想要使用SSL对等validation(closures它并不总是好主意),则可以在Windows上全局使用下一个解决scheme来处理所有应用程序:

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

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

这完全是魔术,CURL现在可以validation证书。

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

即使按照如下的build议..你可能仍然有一个错误的问题,如:

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

问题在于SSL版本。 版本3使用以下内容

 curl_setopt($ch, CURLOPT_SSLVERSION,3) 

我假设你已经启用对端和主机的validation,并指向一个实际的证书文件。 例如。

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem"); 

这是openssl和VeriSign的一个“问题”。

我有一个类似的问题,我的openssl缺less由VeriSign签署服务器证书使用的中间SSL证书。

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

我必须从威瑞信主页或Firefox证书数据库导出将这些中间证书导入到我的本地ca-certificates列表中,在这一步之后,我可以使用wget / curl使用受保护的连接而不会出现任何错误。

如果它是一个开发者机器 – 你也可以在你的系统中添加这个证书。 这样的东西 – https://www.globalsign.com/support/intermediate/intermediate_windows.php这是用于WinXP,但它也适用于其他版本的Windows。;

你不是在发送SSL证书。 SSL证书出现问题,因为它安装在您正在联系的主机上。 使用选项-k或–insecure来越过投诉。

啊。 请参阅Ryan Graham的回答

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

 <Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>