file_get_contents():SSL 操作失败,代码为 1(证书验证失败)

Posted

技术标签:

【中文标题】file_get_contents():SSL 操作失败,代码为 1(证书验证失败)【英文标题】:file_get_contents(): SSL operation failed with code 1 (certificate verify failed) 【发布时间】:2016-12-19 17:39:38 【问题描述】:

我已经安装了 WAMP 3.0.4 并且正在尝试编写一个连接到外部 HTTPS Web 服务的 php 脚本。但这会返回错误:

警告:file_get_contents():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

我写了一个简短的脚本来演示这个问题:

<?php
$auth = base64_encode('username:password');

$aContext = array(
    'http' => array(
        'proxy' => 'tcp://proxyip:proxyport',
        'request_fulluri' => true,
        'header' => 'Proxy-Authorization: Basic $auth'
    ),
    'SSL' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true,
        'cafile' => 'C:/wamp/certificates/cacert.pem'
    )
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("https://www.google.com", False, $cxContext);

echo $sFile;
?>

需要使用代理服务器。

可以看出,我已尝试安装根证书包并将 verify_peer 添加为 false(不是我会在生产中这样做),但我仍然收到此错误。

从上面可以清楚地看出,我是一个 Apache / WAMP 新手。有人可以解释我缺少什么吗?

【问题讨论】:

这能回答你的问题吗? file_get_contents(): SSL operation failed with code 1, Failed to enable crypto 【参考方案1】:

如果您想禁用 SSL 连接验证,您可以使用:

'verify_peer' => false

在你的代码里面:

<?php
$auth = base64_encode('username:password');

$aContext = array(
    'http' => array(
        'proxy' => 'tcp://proxyip:proxyport',
        'request_fulluri' => true,
        'header' => "Proxy-Authorization: Basic $auth"
    ),
    'ssl' => array(
        'verify_peer' => false,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("https://www.google.com", False, $cxContext);

echo $sFile;
?>

但是请注意,这意味着没有人可以保证您获得的数据是真实的(因为 ssl 证书未经验证)。

如果你想验证证书,你应该使用 root 证书 就像你的问题一样,但是,你说你使用 WAMP,所以你的 cafile 的路径应该是这样的:

"cafile" => "c:/wamp/certificates/cacert.pem",

更重要的是-您对问题中的proxy 只字未提。它是您需要的东西,还是您在某处找到并尝试使用的东西?

如果您不需要代理,请从您的请求中删除 if。

【讨论】:

感谢您抽出宝贵时间回复。不幸的是,我已经尝试了这些方法,但仍然收到错误消息。我已经编辑了这个问题,试图让它更清楚。【参考方案2】:

在 macOS 上使用 MAMP 时,只需重新启动 MAMP 服务器即可为我解决此问题。

【讨论】:

以上是关于file_get_contents():SSL 操作失败,代码为 1(证书验证失败)的主要内容,如果未能解决你的问题,请参考以下文章

PHP file_get_contents() SSL 操作失败,代码为 1

file_get_contents(): SSL operation failed with code 1...解决办法和stream_context_create作用

file_get_contents(): SSL operation failed with code 1...解决办法和stream_context_create作用

file_get_contents采集https报错解决办法

只要是使用函数file_get_contents访问 https 的网站都要开启

需要带有 file_get_contents (PHP) 的 HTTP 500 响应体