File_get_contents игнорирует verify_peer => false?
file_get_contents хост https работает отлично, за исключением конкретного хоста (тестовый сервер api из какой-то компании - ip whitelisted, не может дать вам URL для тестирования). Это исключает не загруженные модули https и другие ошибки начальной настройки.
Я тестировал с несколькими установками PHP, все в версиях v5.3.3, 32bits, 32bits Debian.
Запрос работает с cURL, но только при установке curl_setopt($curl,
CURLOPT_SSL_VERIFYPEER, 0);
. Однако установка verify_peer"=>false
в контексте для file_get_contents, по-видимому, не имеет значения.
С файлом_get_contents, тот же самый запрос (тот же URL-адрес, то же XML-POST-данные) терпит неудачу с SSL: Connection reset by peer:
$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? Любые идеи отладки?
Ответы
Ответ 1
попробуйте этот код:
$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 клиента php в противном случае из конфигурации сервера.
Ответ 2
dont 'знает, действительно ли это поможет, но попытайтесь удалить опции SSL
из вашего массива параметров.
Причина этого:
согласно http://www.php.net/manual/en/context.ssl.php, verify_peer
по умолчанию false
.
allow_self_signed
ТРЕБУЕТСЯ verify_peer
и по умолчанию false
.
Из вышеизложенного я понимаю, что allow_self_signed
, вероятно, переопределяет вашу настройку для verify_peer
.
Итак, попробуйте без опции для SSL
или без allow_self_signed
, и сообщите нам, помогло ли это кому-либо.
Ответ 3
Вы можете попробовать отладить это с помощью Wireshark - вы можете получить лучшее представление о том, что пойдет не так, вы должны увидеть, какой SSL возникает ошибка.
Ответ 4
установите только этот
yum install ca-certificates.noarch