Использование HTTPS-ссылки с методами php (file_get_contents, getimagesize) - PullRequest
3 голосов
/ 07 декабря 2011

У меня возникает проблема при попытке прочитать URL-адрес HTTPS на моем веб-сайте.

Если я использую «http», проблем нет (с file_get_contents и curl), но когда я заменяю «http»по "https" эти методы не работают.

Я получаю некоторые ошибки:

failed to open stream: operation failed occured

Failed to enable crypto occured

SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

В моем браузере все методы работают: https://ssl10.ovh.net/~fyprbqhq/_perso/facebook.myclimb/test.php (дисплей должен отображаться«ОК»)

В phpinfo () я получил:

openssl
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8c 05 Sep 2006

Если у вас есть идеи.

Спасибо за помощь.

(Ps: get_headers () в моем случае тоже не работает с https)

Дополнительная информация:

file_get_contents:

$data = file_get_contents("https://ssl10.ovh.net/~fyprbqhq/_perso/facebook.myclimb/test.php");

Завиток:

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "http://ssl10.ovh.net/~fyprbqhq/_perso/facebook.myclimb/test.php");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($curl_handle);
curl_close($curl_handle);

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

Судя по полученной вами ошибке (SSL23_GET_SERVER_HELLO: неизвестный протокол), это почти наверняка вызвано тем, что сервер имеет более новую версию SSL, чем ваш клиент.

Сервер, вероятно, использует версию> = 1.0.0, в то время как вы используете 0.9.8c

Ваша версия SSL с 2006 года. Посмотрите на список уязвимостей в OpenSSL за последние 5 лет в качестве причины для васдля обновления.

Многие другие люди сообщили о подобных событиях .Также здесь и здесь .

0 голосов
/ 25 февраля 2015

Если вы используете PHP 5.6.x, произошли некоторые изменения, влияющие на согласование SSL / TLS.

В PHP 5.6 все потоковые оболочки теперь проверяют сертификаты пиров и имена хостов по умолчанию при использовании SSL / TLS.

Чтобы обойти хосты, у которых нет проверенных сокетов ssl / tls, попробуйте использовать это.

$ctx = stream_context_create(['ssl' => [
    'capture_session_meta' => TRUE,
    'verify_peer' => false,
    'verify_peer_name' => false
]]);

$html = file_get_contents('https://google.com/', FALSE, $ctx);
$meta = stream_context_get_options($ctx)['ssl']['session_meta'];
var_dump($meta);

Это, конечно, не рекомендуется, поскольку вы утрачиваете подтверждение своего хоста.

Для меня это вошло в игру при доступе к flickr api - api.flickr.com.

Ссылка: http://php.net/manual/en/migration56.openssl.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...