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

5

我已经安装了WAMP 3.0.4,并且正在尝试编写一个PHP脚本连接到一个外部的HTTPS网络服务。但是这返回以下错误:

警告: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操作失败,错误代码为1,无法启用加密 - Moradnejad
2个回答

8
如果您想禁用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证书)。

如果您想要验证证书,应该使用根证书,就像您在问题中提到的一样。但是,您说您正在使用WAMP,因此您的cafile路径应该类似于:

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

更重要的是,你在问题中没有提及 proxy。这是你需要还是从其他地方找到并尝试使用的东西?

如果不需要代理,只需从请求中删除它。


感谢您抽出时间回复。不幸的是,我已经尝试了这些方法,但仍然收到错误提示。我已经编辑了问题,希望能更清楚地表达。 - BrightonBoy

-3

在 macOS 上使用 MAMP 时,简单地重启 MAMP 服务器就解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接