Использование HTTPS-ссылки с php-методами (file_get_contents, getimagesize)

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

Если я использую «http», нет проблем (с файлом_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); 

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

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

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

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

Если вы используете 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