用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_VERIFYPEER
和CURLOPT_SSL_VERIFYHOST
为FALSE
。 这应该禁用两个主要的检查。 他们可能不是都需要,但这至less应该让你去。
要清楚,这将禁用旨在保护您的function。 只有在通过其他方式validation了证书和服务器的情况下才能执行此操作。
有关PHP网站的更多信息: curl_setopt()
如果您想要使用SSL对等validation(closures它并不总是好主意),则可以在Windows上全局使用下一个解决scheme来处理所有应用程序:
- 从这里下载带有根证书的文件: http : //curl.haxx.se/docs/caextract.html
- 添加到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"/>