我们正在使用composer用Satis升级依赖项。在最近的服务器升级之后,我们无法这样做。缩小可能的原因,我们发现,file_get_contents php函数在尝试建立ssl连接时失败。
我们正在使用以下脚本测试ssl:
<?php
$url = 'https://satis.work.com/packages.json';
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'local_cert' => '/home/work/.ssl/deployer.pem',
]
];
$sslContext = stream_context_create($contextOptions);
$result = file_get_contents($url, false, $sslContext);
echo $result, "\n";
这是抛出的:
PHP警告:file\u get\u contents():无法设置本地证书链文件“%home/work/”。ssl/deployer。pem′;检查您的cafile/capath设置是否在/home/omlook/test ssl中包含证书及其颁发者的详细信息。php第12行php警告:file_get_contents():无法在/home/work/test ssl中启用加密。php第12行php警告:文件获取内容(https://satis.work.com/packages.json):无法打开流:在/home/work/test ssl中操作失败。php在线12
这绝对不是权限或文件所有权的问题,脚本可以读取. pem就好了。令人困惑的是,在我的本地环境中,完全相同的脚本和. pem键是如何正常工作的,而且版本差异似乎没有那么大。
当地环境:
PHP7.0。18-0ubuntu0。16.04.1(cli)(NTS)版权所有(c)1997-2017 PHP Group Zend Engine v3。0.0,版权所有(c)1998-2017 Zend Technologies与Zend OPcache v7。0.18-0 uBuntu0。16.04.Zend Technologies 1999-2017年版权所有(c)
OpenSSL 1.0。2g 2016年3月1日
服务器:
PHP7.1。7-1乌本图14。04.1黛布。苏里。org 1(cli)(创建日期:2017年7月7日10:07:42)(NTS)版权所有(c)1997-2017 PHP Group Zend Engine v3。1.0,版权所有(c)1998-2017 Zend Technologies与Zend OPcache v7。1.7-1乌本图14。04.1黛布。苏里。组织1,版权(c)1999-2017,由Zend Technologies出版
OpenSSL 1.1。2017年5月25日起
我为自己解决了同样的问题。明文元数据似乎无关紧要。类似的代码在openssl 1.1.0j的php 7.0上对我有效,在openssl 1.1.1c的php 7.3上被打破-我有相同的错误文本。添加明文元数据对我没有帮助。用当前ca证书添加Cafile
上下文参数对我也没有帮助。
当我试图用curl提出同样的请求时,我有错误:
curl -k --cert cert.pem https://myservice.com/soap/ShopService/
curl: (58) could not load PEM client certificate, OpenSSL error error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak, (no key found, wrong pass phrase, or wrong file format?)
所以我发现现有的旧客户端证书是用弱SHA1和RSA加密算法签名的。私钥的长度是2048位-没问题(如果您有1024位-现在不安全,您还需要一个新的更长的密钥)
我已经用实际的sha256散列(openssl选项-sha256)重新发布了我的客户端证书。我的CA证书具有相同的弱哈希sha1,但无需更改它,只需更改客户端证书即可。命令:
# here:
# cert.pem - my old client certificate with private key
# ca.pem - service's current CA certificate for signing client certificates with it's private key
# cert2.pem - my new working client certificate with the same old private key
#
# make new certificate request from current client certificate
openssl x509 -x509toreq -in cert.pem -out cert2.csr -signkey cert.pem -sha256
# make new certificate
openssl x509 -req -in cert2.csr -out cert2.pem -CA ca.pem -sha256 -days 730 -set_serial 0x51ca170d
# append private key
openssl rsa -in cert.pem >> cert2.pem
小时的痛苦,现在它的确定)似乎php发送不正确的错误消息为这个错误。
只有在PEM文件中的“开始证书”部分之前省略了明文元数据(颁发者、有效性等)时,才会出现这种情况。对于较新版本的PHP(包括7.0),这一部分现在似乎是强制性的。到目前为止,我还没有发现更多,但我的猜测是,这是一个openssl问题。更新证书,包括openssl生成的元数据部分,为我解决了这个问题。
PHP/Apache2中的文件获取内容是从Facebook获取用户图片。直到最近,它一直运转良好。现在,它总是在一分钟后超时,在我的Apache2 error.log中有以下错误: PHP警告:文件\u获取\u内容(https://graph.facebook.com/999999999/picture?width=200):无法打开流:连接超时 下面是代码(我最近添加了$context以查看它是
我已经创建了一个索引。MAMP中的php页面。 我的索引。php的读取方式与下面的完全相同。我通过localhost:8888访问它。 然而,它并没有像我相信的那样从这个页面返回html源代码,而是返回http://stackoverflow.com 作为一个常规网页,就像你现在看到的网页一样。 我的MAMP使用PHP 5.5.10。user_agent,allow_url_fopen。 我很困惑
我正在使用php执行一个远程url,使用文件内容。如果file_get_contents检索到的内容不是空的,那么我会回显一条消息,说是complete。 然而,远程网址有时可能需要一点时间来加载,因为这整个PHP页面需要很长时间来加载。当它完成时,显示结果为完成或错误 谢谢
我在使用file\u get\u内容与$\u get组合时遇到问题。例如,我尝试使用文件\u get\u内容加载以下页面: https://bing.com/?q=how 打领带 如果我像这样加载它,页面加载正常: http://localhost/load1.php 然而,当我这样加载它时,我有问题: http://localhost/load2.php?url=https//bing.com/
我正在尝试将安装模块添加到测试Drupal站点,但是我一直收到以下错误:由于错误“cURL error 60:SSL证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)"无法从中检索Drupal项目https://www.drupal.org/project/ctools/releases/8.x-3.4. 到