当前位置: 首页 > 面试题库 >

file_get_contents():SSL操作失败,代码为1,无法启用加密

汪理
2023-03-14
问题内容

我一直试图从我在服务器上创建的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; ?>


 类似资料:
  • null 我们用的是Gentoo服务器。我们最近升级到PHP版本5.6。这个问题是在升级之后出现的。 在前面的尝试中,我设置,并将其作为参数传递给file_get_contents,如下所述:file_get_contents忽略verify_peer=>false?但就像作者指出的那样;没什么区别。 我询问了一位服务器管理员,我们的php.ini文件中是否存在以下行: extension=php

  • 我想用“我是个白痴”作为这个问题的开头,但我真的需要一些帮助。 我有一个由GoDaddy托管的PHP站点。在过去的几年里,我一直使用file_get_contents()将一个简单的XML页面读入我站点的mySQL数据库。今年一月,我开始收到以下警告。 警告:file_get_contents()[function.file-get-contents]:SSL操作失败,代码为1。OpenSSL错误

  • 我已经安装了WAMP3.0.4,并试图编写一个连接到外部HTTPS web服务的PHP脚本。但这将返回错误: 从上面可以清楚地看出,我是Apache/WAMP的新手。也许有人能解释一下我错过了什么吗?

  • 问题内容: 我正在通过SSL连接到数据库Google Cloud SQL。我使用codeigniter 3.0进行了此操作,尽管mysqli驱动程序进行了一些修改以允许此功能。 几个月来一直运作良好。但是,它 刚刚 开始返回此警告: 我认为这是主要问题,但我不知道那是什么意思。我已经搜索了Diffie- Hellman密钥交换以及“密钥太小”消息,但是运气不高。 这是否表明服务器上的密钥已被篡改?

  • 我正在建立一个个人股票平台(不是分布式的)。我想要的一个组件是这个页面上的EPS图: https://eresearch.fidelity.com/eresearch/evaluate/curritials/currence.jhtml?stockspage=currene&symbols=aapl&showpriceline=yes 正如您所看到的,该页面是,所以经过几天的努力,我启用了,现在它