file_get_contents игнорирует verify_peer => false?

file_get_contents хост https работает просто отлично, за исключением конкретного хоста (тестовый сервер api из какой-то компании – ip whitelisted, не может дать вам URL для тестирования). Это исключает не загруженные модули https и другие ошибки начальной настройки.

Я тестировал несколько установок PHP, все в версиях v5.3.3, 32 бит, Debian 32bits.

Запрос работает с cURL, но только при установке curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); , Однако установка verify_peer"=>false в контексте для file_get_contents, похоже, не имеет значения.

С file_get_contents, тот же самый запрос (тот же URL-адрес, то же XML-POST-данные) терпит неудачу с SSL: Сброс соединения с помощью одноранговой сети :

 $arrContextOptions=array( "http" => array( "method" => "POST", "header" => "Content-Type: application/xml; charset=utf-8;\r\n". "Connection: close\r\n", "ignore_errors" => true, "timeout" => (float)30.0, "content" => $strRequestXML, ), "ssl"=>array( "allow_self_signed"=>true, "verify_peer"=>false, ), ); file_get_contents("https://somedomain:2000/abc/", false, stream_context_create($arrContextOptions)); 

,

Кто-нибудь сталкивался с файлом_get_contents? Любые идеи отладки?

попробуйте этот код:

 $fp = fsockopen("ssl://somedomain/abc/", 2000 , $ErrNo, $ErrString, 30); if (!$fp) { echo "Error No : $ErrNo - $ErrString <br />\n"; } else { $out = "POST / HTTP/1.1\r\n"; $out .= "Host: somedomain \r\n"; $out .= "Content-Type: application/xml; charset=utf-8;\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } 

если вы не получите ошибку, я думаю, что проблема (с файлом_get_contents) заключается в формировании клиентской php-конфигурации в противном случае из конфигурации сервера.

не знаю, действительно ли это поможет, но попытайтесь удалить параметры SSL из вашего опционного массива.

Причина этого: согласно http://www.php.net/manual/en/context.ssl.php , verify_peer по умолчанию является false .

allow_self_signed REQUIRES verify_peer и по умолчанию является false .

Из вышеизложенного, я понимаю, что allow_self_signed вероятно, переопределяет вашу настройку для verify_peer .

Поэтому, пожалуйста, попробуйте без каких-либо параметров для SSL или без allow_self_signed , и сообщите нам, помогло ли это кому-либо.

Вы можете попробовать отладить это с помощью Wireshark – вы можете лучше понять, что пойдет не так, вы должны увидеть, какая ошибка SSL возникает.

только установите это

 yum install ca-certificates.noarch