我们正在使用 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_get_contents():无法设置本地证书链文件`/home/work/.ssl/deployer.pem';检查您的 cafile/capath 设置是否在第 12 行的 /home/omlook/test-ssl.php 中包含证书及其颁发者的详细信息 PHP 警告:file_get_contents():无法在 /home/work/test-ssl 中启用加密。第 12 行 PHP 警告:file_get_contents(https://satis.work.com/packages.json):打开流失败:第 12 行 /home/work/test-ssl.php 中的操作失败
绝对不是权限或文件所有权的问题,脚本可以读取 .pem 就好了。令人困惑的是,完全相同的脚本和 .pem 密钥如何在我的本地环境中正常工作,而且版本差异似乎并不那么重要。
当地环境:
PHP 7.0.18-0ubuntu0.16.04.1 (cli) ( NTS ) 版权所有 (c) 1997-2017 PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.18-0ubuntu0。 16.04.1,版权所有 (c) 1999-2017,由 Zend Technologies 提供
OpenSSL 1.0.2g 2016 年 3 月 1 日
服务器:
PHP 7.1.7-1+ubuntu14.04.1+deb.sury.org+1 (cli) (build: Jul 7 2017 10:07:42) (NTS) Copyright (c) 1997-2017 The PHP Group Zend Engine v3. 1.0,版权所有 (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.7-1+ubuntu14.04.1+deb.sury.org+1,版权所有 (c) 1999-2017,由 Zend Technologies
OpenSSL 1.1.0f 2017 年 5 月 25 日