file_get_contents():SSL操作失败,代码为1,无法启用加密
我一直试图从我在服务器上创建的PHP页面访问此特定的REST服务。我将问题缩小到这两行。所以我的PHP页面看起来像这样:
<?php$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json");
echo $response; ?>
该页面死于第2行,并出现以下错误:
*
警告:file_get_contents():SSL操作失败,代码为1。OpenSSL错误消息:error:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在第2行的…
php中失败
* 警告:file_get_contents():无法在第2行的… php中启用加密
*
警告:file_get_contents(
https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json
):无法打开流:第2行…php中的操作失败
我们正在使用Gentoo服务器。我们最近升级到PHP版本5.6。升级之后,才出现此问题。
我发现我将REST服务替换为https://www.google.com
;我的页面工作正常。
在较早的尝试中,我设置了“verify_peer”=>false
,并将其作为参数传递给file_get_contents,如下所述:
file_get_contents忽略verify_peer =>
false? 但是就像作者指出的那样;没关系。
我已经问过我们的服务器管理员之一,我们的php.ini文件中的这些行是否存在:
- 扩展名= php_openssl.dll
- allow_url_fopen =开
他告诉我,由于我们使用的是Gentoo,openssl是在构建时进行编译的。并且未在php.ini文件中设置。
我也确认allow_url_fopen
是可行的。由于此问题的特殊性质;我找不到很多帮助的信息。你们有没有遇到过这样的事情?谢谢。
回答:
这是一个非常有用的链接,可找到:
http://php.net/manual/en/migration56.openssl.php
一个正式文档,描述了在PHP 5.6中打开ssl所做的更改。从这里,我了解到我应该将另一个参数设置为false:“ verify_peer_name” =>
false
这具有 非常
重要的安全隐患。禁用验证可能会使MITM攻击者使用无效的证书来窃听请求。尽管在本地开发中执行此操作可能有用,但应在生产中使用其他方法。
所以我的工作代码如下:
<?php$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json", false, stream_context_create($arrContextOptions));
echo $response; ?>
以上是 file_get_contents():SSL操作失败,代码为1,无法启用加密 的全部内容, 来源链接: utcz.com/qa/427129.html