У меня проблема, когда я пытаюсь прочитать 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.