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

Bri*_*Boy 4 php apache wamp

我已经安装了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;
?>
Run Code Online (Sandbox Code Playgroud)

需要使用代理服务器.

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

从上面可以清楚地看到,我是一个Apache/WAMP新手.也许某人可能会解释我所缺少的东西?

Dek*_*kel 6

如果要禁用 SSL连接的验证,可以使用:

'verify_peer' => false
Run Code Online (Sandbox Code Playgroud)

在你的代码里面:

<?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;
?>
Run Code Online (Sandbox Code Playgroud)

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

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

"cafile" => "c:/wamp/certificates/cacert.pem",
Run Code Online (Sandbox Code Playgroud)

更重要的是 - 你proxy在问题中没有说什么.它是你需要的东西,还是你在某处找到的东西,只是想用它?

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