file_get_contents(): Ошибка операции SSL с кодом 1 (проверка сертификата не удалась)

Я установил 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. Может кто-нибудь объяснить, что мне не хватает?


person BrightonBoy    schedule 12.08.2016    source источник
comment
Отвечает ли это на ваш вопрос? file_get_contents(): операция SSL ошибка с кодом 1, не удалось включить криптографию   -  person Moradnejad    schedule 28.11.2020


Ответы (2)


Если вы хотите отключить проверку соединения 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" => "c:/wamp/certificates/cacert.pem",

Что еще более важно, вы ничего не сказали о proxy в своем вопросе. Это то, что вам нужно, или это то, что вы где-то нашли и просто пытаетесь использовать?

Если вам не нужен прокси, просто удалите его из запроса.

person Dekel    schedule 12.08.2016
comment
Спасибо, что нашли время ответить. К сожалению, я пробовал эти вещи и все еще получаю сообщение об ошибке. Я отредактировал вопрос, чтобы попытаться сделать это более ясным. - person BrightonBoy; 15.08.2016

В то время как на MAMP на macOS, простой перезапуск сервера MAMP решил эту проблему для меня.

person Milan Švehla    schedule 24.04.2017