Здравствуйте! Есть веб приложение которое крутиться на IIS и работает только по https. Это приложение предоставляет некий API интерфейс. Сертификат для создания защищенного соединения сервер использует гостовский, т.е. сделанный с помощью крипто про. Есть веб приложение которое пишу я, пишется оно на PHP 5.6. И это приложение должно подключаться к той API через https. Мое приложение крутиться на веб сервере apache2 и все это управляется операционной системой Ubuntu. Решил в своем приложении протестировать это соединение простым способом, написал в коде: PHP: echo file_get_contents('https://ra.local'); На что он мне выдает ошибку типа: Код (Text): Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:0609E09C:digital envelope routines:pkey_set_type:unsupported algorithm error:0B09406F:x509 certificate routines:x509_pubkey_decode:unsupported algorithm error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /var/www/html/index.php on line 7 Warning: file_get_contents(): Failed to enable crypto in /var/www/html/index.php on line 7 Warning: file_get_contents(https://ra.local): failed to open stream: operation failed in /var/www/html/index.php on line 7 bool(false) Что делать, я уже голову сломал, может тут мне кто то подскажет куда копать?
У вас 2 пути: либо донастроить сервер, чтобы можно было https через file_get_contents читать, либо использовать curl Ветка: https://php.ru/forum/threads/file_get_contents-i-https.43417/ Еще: http://qaru.site/questions/68755/how-to-get-filegetcontents-to-work-with-https
У меня HTTPS работает, т.е. если я напишу вот так: PHP: echo file_get_contents('https://yandex.ru'); То все будет работать. У меня проблема в том что сервер по адресу https://ra.local присылает мне гостовский сертификат, а PHP его видимо не понимает.
Ну попробуйте через curl тогда, отключив ssl верификацию curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 0); --- Добавлено --- Либо, если через file_get_contents, как по ссылке https://stackoverflow.com/questions...on-failed-with-code-1-failed-to-enable-crypto
Сделал так: PHP: $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://ra.local", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", )); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); var_dump($err); Выдает следующее: Код (Text): string(74) "error:1421C0F8:SSL routines:set_client_ciphersuite:unknown cipher returned"
Видимо вам придется потрудиться. Немного прогуглив, прихожу к выводу, что вам нужен OpenSSL с поддержкой ГОСТ Обсуждение вопросов можно тут посмотреть: https://phpclub.ru/talk/threads/curl-и-ГОСТ.74854/page-2 https://toster.ru/q/150523
Настроил openssl и гост 2012. Если в самой openssl прописывать, то все работает, но если пытаюсь получить доступ через PHP, то не работает. Уже голову сломал
Необходимо сделать подключение из приложения следующим образом: <?php $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $response = file_get_contents('https://ra.local', false, stream_context_create($arrContextOptions)); echo $response; ?>