curl cainfo php ini

[решено] php curl https запрос как правильно

Собственно параметры CURL для работы с SSL:
CURLOPT_SSL_VERIFYPEER — если поставить его в 0, то удалённый сервер не будет проверять наш сертификат. В противном случае необходимо этот самый сертификат послать.
CURLOPT_CAINFO — указывать файл сертификата, если CURLOPT_SSL_VERIFYPEER установлен в 1.
CURLOPT_SSLVERSION — целое число, указывает версию SSL (2 или 3), обычно определяется автоматически.
CURLOPT_SSL_VERIFYHOST — будет ли производиться проверка имени удалённого сервера, указанного в сертификате. Если установить значение «2», то будет произведена ещё и проверка соответствия имени хоста. (если честно, я так и не понял что делает этот флаг)

Значение остальных параметров:
CURLOPT_URL — это URL запроса.
CURLOPT_POST — говорим, что будем посылать POST запрос.
CURLOPT_POSTFIELDS — собственно POST переменыые.
CURLOPT_RETURNTRANSFER — вернуть результат запроса, а не выводить в браузер.

А вот что написано в хелпе: http://php.net/manual/en/function.curl-setopt.php#110457
Please everyone, stop setting CURLOPT_SSL_VERIFYPEER to false or 0. If your PHP installation doesn’t have an up-to-date CA root certificate bundle, download the one at the curl website and save it on your server:

Then set a path to it in your php.ini file, e.g. on Windows:

Turning off CURLOPT_SSL_VERIFYPEER allows man in the middle (MITM) attacks, which you don’t want!

Что означет не использовать, тот метод что я описал выше CURLOPT_SSL_VERIFYPEER, а обновить CA root certificate bundle и прописать путь к сертификату: curl.cainfo

Если вы хотите посмотреть как выглядит HTTP \ HTTPS запрос который вы отправляете в браузере, то поставьте в chrome расширение Advanced REST client

Header values are described in the curl_getinfo() manual. Highlights include:

«url» the final page URL after redirects
«content_type» the content type (e.g. «text/html; charset=utf-8»)
«http_code» the page status code (e.g. «200» on success)
«filetime» the date stamp on the remote file
This function adds::

«errno» the CURL error number (0 on success)
«errmsg» the CURL error message for the error number
«content» the page content (e.g. HTML text, image bytes, etc.)
On success, «errno» is 0, «http_code» is 200, and «content» contains the web page.

On an error with a bad URL, unknown host, timeout, or redirect loop, «errno» has a non-zero error code and «errmsg» has an error message (see the CURL error code list).

Читайте также:  Ugly sneakers что это

On an error with a missing web page or insufficient permissions, «errno» is 0, «http_code» has a non-200 HTTP status code, and «content» contains the site’s error message page (see the Wikipedia List of HTTP status codes).

This function can be extended to support GET and POST for web forms, file uploads, logins, SSL for encrypted web pages, and access through proxy servers.

Источник

Curl cainfo php ini

Настройки конфигурации cURL

Имя По умолчанию Место изменения Список изменений
curl.cainfo NULL PHP_INI_SYSTEM

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

User Contributed Notes 3 notes

I was editing wrong php.ini file in last comment.

Even though loaded configuration path was showing as «D:\wamp64\bin\apache\apache2.4.37\bin\php.ini» inside phpinfo() of WAMP Server, It was actually loading «D:\wamp64\bin\apache\apache2.4.37\bin\phpForApache.ini»

Once I set both the variables inside phpForApache.ini, details are displayed in phpinfo() and error has gone without extra coding line.

cURL error 60: SSL certificate problem: unable to get local issuer certificate

This local development error comes when curl.cainfo variable is not set correctly.

I faced this issue in PHP Version 7.3.1

In order to fix the error, I downloaded cacert.pem from https://curl.haxx.se/docs/caextract.html

Set the following paths in php.ini

Even after adding the paths and restart Apache, Inside phpinfo(), both the paths were showing blank.

The error will go only if we set via php code of the project.

Example code worked for me :-

$guzzle = new \GuzzleHttp\Client([‘verify’ => ‘D:\wamp64\bin\php\php7.3.1\extras\ssl\cacert.pem’]);

As of PHP 7.2 (Win 64) this directive, will NOT show in the phpinfo() even though it’s set.

Источник

curl_init

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

curl_init — Инициализирует сеанс cURL

Описание

Список параметров

Протокол file становится недоступным в cURL, если задана опция open_basedir.

Возвращаемые значения

Возвращает дескриптор cURL в случае успешного выполнения, и false в случае возникновения ошибки.

Список изменений

Версия Описание
8.0.0 В случае успешного выполнения возвращает экземпляр CurlHandle ; раньше, возвращался ресурс ( resource ).
8.0.0 url теперь допускает значение null.

Примеры

Пример #1 Инициализация нового сеанса cURL и загрузка веб-страницы

// создание нового ресурса cURL
$ch = curl_init ();

Смотрите также

User Contributed Notes 1 note

On recent distributions CURL and PHP support for CURL have not been included in the main product. In particular in recent distributions of Ubuntu Linux CURL and PHP support for CURL are not even available from the official repositories. The steps to incorporate support are complex and require adding a non-standard repository. It is therefore advisable for programmers to rewrite code to use the stream interface to access resources across the Internet. For example:

«`php
$opts = array(
‘http’ => array (
‘method’=>»POST»,
‘header’=>
«Accept-language: en\r\n».
«Content-type: application/x-www-form-urlencoded\r\n»,
‘content’=>http_build_query(array(‘foo’=>’bar’))
)
);

This stream support can also be accessed using the object-oriented interface of SplFileObject.

Источник

Curl cainfo php ini

PHP поддерживает libcurl, библиотеку, созданную Daniel»ом Stenberg»ом, которая даёт возможность соединяться с серверами различных типов и по разным протоколам.
libcurl в настоящее время поддерживает протоколы http, https, ftp, gopher, telnet, dict, file и ldap.
libcurl также поддерживает сертификаты HTTPS, HTTP POST, HTTP PUT, загрузку по FTP (это можно сделать также РНР-расширением ftp), загрузку на основе форм HTTP, прокси, куки и аутентификацию user+password.

Эти функции были введены в PHP 4.0.2.

curl_init

Описание

resource curl_init([string url])

Функция curl_init() инициализирует новую сессию и возвратит CURL-дескриптор для использования в функциях curl_setopt(), curl_exec() и curl_close(). Если необязательный параметр url предоставлен, то опция CURLOPT_URL получит значение этого параметра. Вы можете вручную устанавливать его с помощью функции curl_setopt().

curl_setopt

Описание

bool curl_setopt (resource ch, string option, mixed value)

Функция curl_setopt() устанавливает опции для CURL-сессии, идентифицируемой параметром ch. Параметр option является опцией, которую вы хотите установить, а value это значение опции option.

Параметр value должен быть long для следующих опций (специфицированных параметром option):

Параметр value должен быть строкой для следующих значений параметра option:

Следующие опции ожидают дескриптора файла, который получается с помощью функции fopen():

Параметр value должен быть функцией следующего вида long write_callback (resource ch, string data) для следующих значений параметра option:

Параметр value должен быть функцией следующего вида string read_callback (resource ch, resource fd, long length)<> для следующих значений параметра option:

Источник

Соединение https с использованием CURL из командной строки

Я новичок в мире Curl и Cacerts и сталкиваюсь с проблемой при подключении к серверу. В принципе, мне нужно проверить подключение через https от одной машины к другой машине. У меня есть URL-адрес, к которому мне нужно подключиться от Machine A (Linux-машина) Я попробовал это в командной строке

и получил следующее:

Просматривая некоторые статьи через Интернет, я сделал это:

Но получил ту же ошибку.

ОТВЕТЫ

Ответ 1

Ответ 2

Простое решение

Вот мой повседневный сценарий:

Выход:

Ответ 3

Вам нужно предоставить целую цепочку сертификатов для завивки, поскольку завиток больше не поставляется с сертификатами CA. Поскольку опция cacert может использовать только один файл, вам необходимо сконфигурировать всю информацию о цепочке в 1 файл

Скопируйте цепочку сертификатов (например, из вашего браузера) в двоичную кодировку DER, закодированную DER. x.509 (.cer). Сделайте это для каждого сертификата.

Преобразуйте сертификаты в PEM и разделите их на 1 файл.

Ответ 4

Ответ 5

Не уверен относительно решения, которое вы предлагаете, но я просто искал подобную информацию, и я нашел этот полезный сайт для использования curl с PHP

Ответ 6

У меня действительно была такая проблема, и я решаю ее с помощью следующих шагов:

Получите пакет сертификатов корневого CA отсюда: https://curl.haxx.se/ca/cacert.pem и сохраните его на локальном

Найдите файл php.ini

Установите curl.cainfo в качестве пути сертификатов. Так будет что то вроде

Ответ 7

Ответ 8

поставив перед собой задачу Я смог использовать существующий файл CA CA по умолчанию, на debian6 это:

как root, это можно сделать следующим образом:

затем заново запустите веб-сервер.

Ответ 9

ты мог бы использовать это

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

Ответ 10

Для меня я просто хотел протестировать сайт с автоматическим перенаправлением http-> https. Я думаю, что у меня уже были установлены некоторые сертификаты, так что это одно работает для меня на Ubuntu 16.04 с curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3

Ответ 11

Например, чтобы переопределить DNS и подключиться к www.example.com с помощью ssl, используя определенный IP-адрес: (Это также переопределит ipv6)

Другой пример, чтобы подключиться к определенному внутреннему серверу с именем backend1 на порт 8080

Не забудьте добавить заголовок хоста, если сервер нуждается в том, чтобы ответить правильно:

Источник

Читайте также:  практика разговор с деньгами
Образовательный портал