OpenSSL ssl3_get_server_certificate:certificate verify failed

Обсуждение общих вопросов связанных с программой
Аватара пользователя
v_decadence
Сообщения: 3
Зарегистрирован:
13 июл 2015, 14:53

OpenSSL ssl3_get_server_certificate:certificate verify failed

v_decadence » 11 апр 2016, 23:31

Всем привет.

OpenServer 5.2.4 (PHP 7)
Windows 10 x64

При попытке в PHP получить файл с другого сервера через file_get_contents выдаёт такую ошибку:
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

Warning: file_get_contents(): Failed to enable crypto in ssl.php on line 4

Warning: file_get_contents failed to open stream: operation failed in ssl.php on line 4
Ошибка из-за изменений в работе OpenSSL с PHP 5.6

В php.ini OpenServer по умолчанию прописаны пути к сертификатам и openssl расширение включено:
openssl.cafile="%sprogdir%/modules/php/%phpdriver%/cacert.pem"

То есть работать должно из коробки вроде как.
Или я что-то не так понял и что-то ещё нужно, чтобы OpenSSL работал?

Отключение проверки не предлагать, потому что это неверный подход.
AdeptO
Сообщения: 28
Зарегистрирован:
17 дек 2014, 22:57

Re: OpenSSL ssl3_get_server_certificate:certificate verify failed

AdeptO » 25 май 2016, 14:41

брать файл с помощю курл запроса ибо менять сертификаты самого сервака тоже подход некошерный.
<?php
$test_URL       = 'https://test4.allo.chua/test.php';
$certfile       = 'D:/OpenServer/domains/test\client.crt';
$keyfile        = 'D:/OpenServer/domains/test\client.key';

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $test_URL );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $ch, CURLOPT_SSLCERT, $certfile );
curl_setopt( $ch, CURLOPT_SSLKEY, $keyfile );
curl_setopt( $ch, CURLOPT_SSLKEYPASSWD,"1q2w3e");
curl_setopt( $ch, CURLOPT_POST, 0 );
$ch_result = curl_exec( $ch );
// Check for errors
if ( curl_errno($ch) ) {
	$ch_result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
} else {
	$returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
	switch($returnCode){
		case 200:
			break;
		default:
			$ch_result = 'HTTP ERROR -> ' . $returnCode;
			break;
	}
}
curl_close( $ch );

echo $ch_result;

?>
Ответить