Curl php ssl ignore

PHP cURL: Fixing the “SSL certificate problem: unable to get local issuer certificate” error.

If you are using PHP’s cURL functions to connect to an HTTPS URL, then you might come across the following error:

SSL certificate problem: unable to get local issuer certificate. (cURL error code 60)

This is a common error that occurs whenever you attempt to use cURL functions to connect to an HTTPS website.

In plain English, it means that you have not configured cURL to connect to SSL-enabled websites.

The quick fix.

If you do not care about security and are looking for a quick fix, then you can simply disable the following cURL options:

  • CURLOPT_SSL_VERIFYHOST: This option tells cURL that it must verify the host name in the server cert.
  • CURLOPT_SSL_VERIFYPEER: This option tells cURL to verify the authenticity of the SSL cert on the server.

Disabling these two options disables SSL verification.

To disable these two options, you can use the curl_setopt function like so:

//The URL we are connecting to. $url = ‘https://google.com’; //Initiate cURL. $ch = curl_init($url); //Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by //setting them to false. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Execute the request. curl_exec($ch); //Check for errors. if(curl_errno($ch))

The PHP code above essentially tells cURL that we don’t care if the server has a valid SSL cert or not. We want to connect to it anyway.

The problem with this method is that it is insecure and it leaves you open to man-in-the-middle attacks. Simply put, this means that an attacker could potentially intercept the data that you are sending in your cURL requests.

Using a cert with PHP’s cURL functions.

To use a certificate with PHP’s cURL functions, you can download the cacert.pem certificate bundle from the official cURL website.

Once you have downloaded the cacert.pem file, you should move it to whatever directory makes the most sense for you and your setup.

For example, on Windows, I moved my bundle to C:\wamp\cacert.pem

Then, you can simply tell cURL where your certificate bundle is located by using the curl_setopt function:

//Tell cURL where our certificate bundle is located. $certificate = "C:\wamp\cacert.pem"; curl_setopt($ch, CURLOPT_CAINFO, $certificate); curl_setopt($ch, CURLOPT_CAPATH, $certificate);

This allows us to make a secure request to the server and prevent any man-in-the-middle attacks.

Читайте также:  Перенос таблицы word html

Adding the cert to your php.ini file.

If you don’t like the thought of having to specify the location of the certificate bundle in your PHP code, then you can add its path information to your php.ini file like so:

curl.cainfo="C:\wamp\cacert.pem" openssl.cafile="C:\wamp\cacert.pem"

Once you add the above lines to your php.ini file, make sure that you reload the web server / PHP process so that the changes take effect.

Enabling mod_ssl and php_openssl.dll.

If you are using Apache and PHP on Windows, then you might need to enable both mod_ssl and php_openssl.dll.

To enable mod_ssl, you can add the following to your Apache configuration file:

LoadModule ssl_module /usr/lib/httpd/modules/mod_ssl.so

The configuration line above presumes that a file called mod_ssl.so exists in a Linux directory called “/usr/lib/httpd/modules/”.

On Windows, this directory might be something like “C:\wamp\bin\apache\apache2.4.9\modules\“.

You will need to change this line to match your own Apache setup.

To enable php_openssl.dll, you will need to uncomment the following line in your php.ini file:

As always, you should test your configurations and then reload your server for any changes to take effect.

Источник

curl_setopt

true для отмены индикатора прогресса при передачах cURL.

Замечание:

PHP автоматически устанавливает этот параметр в true , меняйте его только для отладочных целей.

Используемые HTTP-методы авторизации. Используемые параметры: CURLAUTH_BASIC , CURLAUTH_DIGEST , CURLAUTH_GSSNEGOTIATE , CURLAUTH_NTLM , CURLAUTH_ANY и CURLAUTH_ANYSAFE .

Можно использовать побитовый оператор | (или) для комбинации нескольких методов вместе. В этом случае cURL опросит сервер на предмет поддерживаемых методов авторизации и выберет лучший из них.

CURLAUTH_ANY — это псевдоним CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM .

CURLAUTH_ANYSAFE — это псевдоним CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM .

Битовая маска из значений CURLPROTO_* . Данная маска ограничивает используемые libcurl протоколы. Это позволяет иметь libcurl, работающую с большим количеством протоколов, и ограничивать работу определённых передач только для некоторого их набора. По умолчанию libcurl использует все поддерживаемые протоколы. Смотрите также параметр CURLOPT_REDIR_PROTOCOLS .

Корректные значения протоколов: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAPS , CURLPROTO_DICT , CURLPROTO_FILE , CURLPROTO_TFTP , CURLPROTO_ALL

Метод аутентификации SOCKS5, который нужно использовать. Варианты: CURLAUTH_BASIC , CURLAUTH_GSSAPI , CURLAUTH_NONE .

Побитовый оператор | (или) можно использовать для объединения нескольких методов. Если это будет сделано, cURL будет опрашивать сервер, чтобы выяснить, какие методы он поддерживает, и выбрать наилучший.

Читайте также:  Css menu with icons and text

CURLAUTH_BASIC разрешает аутентификацию по constant пользователя/пароля.

CURLAUTH_GSSAPI разрешает аутентификацию GSS-API.

CURLAUTH_NONE не разрешает аутентификацию.

По умолчанию CURLAUTH_BASIC|CURLAUTH_GSSAPI . Установите действительное имя пользователя и пароль с помощью параметра CURLOPT_PROXYUSERPWD .

Замечание:

Рекомендуется не устанавливать эту опцию и оставить значение по умолчанию. Установка в 2 или 3 опасно и допускает применение известных уязвимостей в SSLv2 и SSLv3.

Замечание:

Лучше всего не устанавливать это и разрешать использовать значение по умолчанию CURL_SSLVERSION_DEFAULT , которое попытается выяснить версию протокола удалённого SSL.

Собственный метод запроса, используемый вместо «GET» или «HEAD» при выполнении HTTP-запроса. Это полезно при запросах «DELETE» или других, более редких HTTP-запросах. Корректными значениями будут такие как «GET» , «POST» , «CONNECT» и так далее; т.е. не вводите здесь всю строку с HTTP-запросом. Например, указание «GET /index.html HTTP/1.0\r\n\r\n» будет неправильным.

Замечание:

Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.

Протокол по умолчанию, если он отсутствует в схеме URL.

Устанавливает имя сетевого интерфейса, к которому привязан DNS. Это должно быть имя интерфейса, а не адрес.

Установить локальный IPv4-адрес, по которому доступне DNS. Адрес должен быть представлен в виде строки, содержащий одно число.

Установить локальный IPv6-адрес, по которому доступне DNS. Адрес должен быть представлен в виде строки, содержащий одно число.

Замечание:

Аутентификация Secure Remote Password (SRP) для TLS обеспечивает взаимную аутентификацию, если обе стороны имеют общий секрет. Чтобы использовать TLS-SRP, вы также должны установить параметры CURLOPT_PROXY_TLSAUTH_USERNAME и CURLOPT_PROXY_TLSAUTH_PASSWORD .

Тайный пароль, необходимый для использования закрытого ключа SSL, указанного параметром CURLOPT_SSLKEY .

Замечание:

Так как этот параметр содержит ценный пароль, помните, что данный PHP-скрипт нужно хранить в безопасном месте.

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

Параметр Устанавливаемое значение value Замечания
CURLOPT_CONNECT_TO Соединяться с указанный хостом по указанному порту, игнорируя URL. Принимает массив строк формата HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT . Добавлено в cURL 7.49.0. Доступно с PHP 7.0.7.
CURLOPT_HTTP200ALIASES Массив HTTP 200 ответов, которые будут трактоваться корректными ответами, а не ошибочными. Добавлен в cURL 7.10.3.
CURLOPT_HTTPHEADER Массив устанавливаемых HTTP-заголовков, в формате array(‘Content-type: text/plain’, ‘Content-length: 100’)
CURLOPT_POSTQUOTE Массив FTP-команд, выполняемых на сервере, после выполнения FTP-запроса.
CURLOPT_PROXYHEADER Массив пользовательских HTTP-заголовков для отправки на прокси Добавлено в cURL 7.37.0. Доступно с PHP 7.0.7.
CURLOPT_QUOTE Массив FTP-команд, выполняемых на сервере, перед выполнением FTP-запроса.
CURLOPT_RESOLVE Предоставляет адрес для определённой пары хоста и порта. Массив, содержащий строки состоящие из имени хоста, порта и IP-адреса, разделённых двоеточием. Пример: array(«example.com:80:127.0.0.1») Добавлено в cURL 7.21.3.
Читайте также:  Пример использования рекурсии при обработке данных java

Для следующих значений параметра option , параметр value должен быть потоковым дескриптором (возвращаемым, например, функцией fopen() ):

Параметр Устанавливаемое значение value
CURLOPT_FILE Файл, в который будет записан результат передачи. По умолчанию используется поток вывода STDOUT (окно браузера).
CURLOPT_INFILE Файл, из которого должно идти чтение данных, при загрузке на сервер.
CURLOPT_STDERR Альтернативный файл для вывода ошибок, используемый вместо потока ошибок STDERR .
CURLOPT_WRITEHEADER Файл, в который будут записаны заголовки текущей операции.

Callback-функция принимает пять параметров. Первый является декскриптором cURL, второй — общим количеством байт, которое ожидается загрузить с сервера, третий — количество уже загруженных байт, четвёртый — общее количество байт, которое ожидается отправить на сервер, и пятый — количество уже отправленных байт.

Замечание:

Callback-функция вызывается только, если опция CURLOPT_NOPROGRESS установлена в значение false .

Можно вернуть ненулевое значение, чтобы отменить передачу. В этом случае будет выдана ошибка CURLE_ABORTED_BY_CALLBACK .

Другие значения:

Параметр Устанавливаемое значение value
CURLOPT_SHARE Результат выполнения функции curl_share_init() . Позволяет обработчику cURL использовать данные из общего обработчика.

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

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

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

Версия Описание
8.0.0 handle теперь ожидает экземпляр CurlHandle ; раньше, ожидался ресурс ( resource ).
7.3.15, 7.4.3 Добавлено CURLOPT_HTTP09_ALLOWED .
7.3.0 Введены CURLOPT_ABSTRACT_UNIX_SOCKET , CURLOPT_KEEP_SENDING_ON_ERROR , CURLOPT_PRE_PROXY , CURLOPT_PROXY_CAINFO , CURLOPT_PROXY_CAPATH , CURLOPT_PROXY_CRLFILE , CURLOPT_PROXY_KEYPASSWD , CURLOPT_PROXY_PINNEDPUBLICKEY , CURLOPT_PROXY_SSLCERT , CURLOPT_PROXY_SSLCERTTYPE , CURLOPT_PROXY_SSL_CIPHER_LIST , CURLOPT_PROXY_SSLKEY , CURLOPT_PROXY_SSLKEYTYPE , CURLOPT_PROXY_SSL_OPTIONS , CURLOPT_PROXY_SSL_VERIFYHOST , CURLOPT_PROXY_SSL_VERIFYPEER , CURLOPT_PROXY_SSLVERSION , CURLOPT_PROXY_TLSAUTH_PASSWORD , CURLOPT_PROXY_TLSAUTH_TYPE , CURLOPT_PROXY_TLSAUTH_USERNAME , CURLOPT_SOCKS5_AUTH , CURLOPT_SUPPRESS_CONNECT_HEADERS , CURLOPT_DISALLOW_USERNAME_IN_URL , CURLOPT_DNS_SHUFFLE_ADDRESSES , CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS , CURLOPT_HAPROXYPROTOCOL , CURLOPT_PROXY_TLS13_CIPHERS , CURLOPT_SSH_COMPRESSION , CURLOPT_TIMEVALUE_LARGE и CURLOPT_TLS13_CIPHERS .
7.0.7 Добавлены CURL_HTTP_VERSION_2 , CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE , CURL_HTTP_VERSION_2TLS , CURL_REDIR_POST_301 , CURL_REDIR_POST_302 , CURL_REDIR_POST_303 , CURL_REDIR_POST_ALL , CURL_VERSION_KERBEROS5 , CURL_VERSION_PSL , CURL_VERSION_UNIX_SOCKETS , CURLAUTH_NEGOTIATE , CURLAUTH_NTLM_WB , CURLFTP_CREATE_DIR , CURLFTP_CREATE_DIR_NONE , CURLFTP_CREATE_DIR_RETRY , CURLHEADER_SEPARATE , CURLHEADER_UNIFIED , CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE , CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE , CURLMOPT_MAX_HOST_CONNECTIONS , CURLMOPT_MAX_PIPELINE_LENGTH , CURLMOPT_MAX_TOTAL_CONNECTIONS , CURLOPT_CONNECT_TO , CURLOPT_DEFAULT_PROTOCOL , CURLOPT_DNS_INTERFACE , CURLOPT_DNS_LOCAL_IP4 , CURLOPT_DNS_LOCAL_IP6 , CURLOPT_EXPECT_100_TIMEOUT_MS , CURLOPT_HEADEROPT , CURLOPT_LOGIN_OPTIONS , CURLOPT_PATH_AS_IS , CURLOPT_PINNEDPUBLICKEY , CURLOPT_PIPEWAIT , CURLOPT_PROXY_SERVICE_NAME , CURLOPT_PROXYHEADER , CURLOPT_SASL_IR , CURLOPT_SERVICE_NAME , CURLOPT_SSL_ENABLE_ALPN , CURLOPT_SSL_ENABLE_NPN , CURLOPT_SSL_FALSESTART , CURLOPT_SSL_VERIFYSTATUS , CURLOPT_STREAM_WEIGHT , CURLOPT_TCP_FASTOPEN , CURLOPT_TFTP_NO_OPTIONS , CURLOPT_UNIX_SOCKET_PATH , CURLOPT_XOAUTH2_BEARER , CURLPROTO_SMB , CURLPROTO_SMBS , CURLPROXY_HTTP_1_0 , CURLSSH_AUTH_AGENT и CURLSSLOPT_NO_REVOKE .

Примеры

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

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

// установка URL и других необходимых параметров
curl_setopt ( $ch , CURLOPT_URL , «http://www.example.com/» );
curl_setopt ( $ch , CURLOPT_HEADER , false );

// загрузка страницы и выдача её браузеру
curl_exec ( $ch );

// завершение сеанса и освобождение ресурсов
curl_close ( $ch );
?>

Примечания

Замечание:

Передача массива в CURLOPT_POSTFIELDS закодирует данные в виде multipart/form-data, тогда как передача URL-кодированной строки закодирует данные в виде application/x-www-form-urlencoded.

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

Источник

Оцените статью