В Curl встроена поддержка безопасных транспортных соединений (их более защищенная версия называется TLS). Когда вы делаете запрос Curl к HTTPS URL, Curl автоматически проверяет SSL-сертификат целевого URL в хранилище сертификатов локального центра сертификации и предупреждает, если он недействителен, самоподписан или срок его действия истек. Это удобно для производственных сайтов, но неудобно для разработки. Чтобы обойти проверку SSL-сертификата, вы можете использовать опции командной строки Curl -k или --insecure.
1 | curl -k https://expired.badssl.com |
Что такое Curl?
Curl (расшифровывается как Client URL) - это инструмент командной строки с открытым исходным кодом и кроссплатформенная библиотека (libcurl), которую разработчики используют для взаимодействия клиента и сервера. Он позволяет отправлять данные на сервер, передавая целевой URL и данные в качестве параметров командной строки. Curl поддерживает более 25 протоколов, включая HTTP и HTTPS, работает в Linux, Windows и macOS и может быть легко интегрирован в приложения на C++, Java, Python, PHP, Go и т. д.
Что такое SSL?
SSL (расшифровывается как Secure Sockets Layer) - это сетевой протокол для установления безопасных, аутентифицированных и зашифрованных соединений между двумя компьютерами. SSL является предшественником более современного метода шифрования TLS, используемого сегодня. Компания Netscape впервые разработала SSL в 1995 году для обеспечения конфиденциальности, аутентификации и целостности данных в интернет-коммуникациях. Веб-сайт с поддержкой SSL/TLS имеет префикс HTTPS в URL-адресе. SSL защищает конфиденциальность пользователя при работе в Интернете, шифруя все данные, которые поступают на компьютер пользователя и веб-сервер. SSL гарантирует, что любой, кто перехватывает данные в вашей сети, сможет увидеть только зашифрованные символы.
Что такое TLS?
TLS (сокращение от Transport Layer Security), выпущенный в 1999 году, является преемником SSL для аутентификации и шифрования данных, передаваемых по сети. Transport Layer Security - это криптографический протокол, используемый для обеспечения большей безопасности при передаче данных по сети. TLS в основном используется для шифрования связи между веб-приложениями и мобильными приложениями и веб-сервером.
Что такое SSL-сертификат?
SSL-сертификаты позволяют браузерам и серверам шифровать сетевой трафик. SSL-сертификат размещается на исходном сервере и содержит открытый ключ для шифрования сетевого трафика и идентификации веб-сайта. Libcurl выполняет проверку SSL-сертификата прямо из коробки, используя встроенное хранилище сертификатов CA.
Как игнорировать ошибки SSL-сертификата с помощью Curl?
SSL-сертификаты обеспечивают высокую безопасность и защиту данных при использовании на рабочем сайте, но обычно мешают при локальной разработке, поскольку разработчики обычно используют самоподписанные SSL-сертификаты. Вы можете передать опцию -k или --insecure в команду Curl, чтобы указать Curl не проверять SSL-сертификат. Эта опция явно указывает Curl на выполнение "небезопасных" SSL-соединений и передачи файлов. Curl будет игнорировать все предупреждения безопасности о недействительных сертификатах и принимать их за действительные.
1 2 | curl -k [URL] [URL] curl --insecure [options] [URL] |
Как использовать самоподписанный сертификат с Curl?
Чтобы использовать самоподписанный сертификат с Curl, вам нужно:
- Загрузить и сохранить самоподписанный сертификат.
- Сообщить об этом клиенту Curl с помощью ключа командной строки --cacert [file]. Этот параметр указывает Curl использовать указанный файл сертификата для проверки пира. Файл [file] может содержать несколько сертификатов ЦС и должен быть в формате PEM.
В чем разница между параметрами --cacert и --cert?
Опция --cacert [file] указывает Curl использовать указанный файл сертификата для проверки пира. Файл может содержать несколько сертификатов ЦС и должен быть в формате PEM. Параметр --cert [file] указывает Curl использовать указанный файл сертификата клиента при отправке запроса на сервер. Сертификат клиента должен быть в формате PKCS#12 при использовании Secure Transport или в формате PEM при использовании любого другого метода.
Примеры SSL-запросов Curl
Ниже приведены примеры отправки SSL-запросов в Curl:
SSL-соединения с Curl
Ниже приведен пример SSL-соединения с опцией командной строки --insecure к адресу:
1 | curl --insecure https://expired.badssl.com |
Отправка сертификата клиента с помощью Curl
Сертификат клиента передается Curl на сервер как часть рукопожатия TLS, и сервер проверяет сертификат во время рукопожатия.
1 | curl --cert certificate.pem https://example.com/echo |
Отправка SSL-сертификатов с паролями
Вы можете передать пароль сертификата в опции командной строки --cert после имени файла сертификата в следующем формате: --cert [файл]:[пароль]
1 2 | curl https://example.com/echo --cert certificate.pem:mypassword |
Предоставление самоподписного сертификата с помощью Curl
Вы можете предоставить самоподписанный сертификат с помощью параметра командной строки --cacert:
1 2 | curl https://example.com/echo --cacert self-signed.crt |