Есть ли в curl опция --no-check-certificate, такая как wget?

448

Я пытаюсь сделать запрос curl на один из наших локальных серверов разработки, на котором запущен сайт разработчика с самозаверяющим сертификатом SSL. Я использую curl из командной строки.

Я видел сообщения в блоге, в которых упоминалось, что вы можете добавить в список сертификатов или указать определенный (самоподписанный) сертификат как действительный, но есть ли универсальный способ сказать «не проверять» сертификат ssl - например --no-check-certificate, Wget имеет?

УХО
источник
1
--insecureне будет работать, если у вас есть определенные версии php или apache, как описано в superuser.com/questions/1015325/…
user3338098

Ответы:

598

Да. Из справочной страницы :

-k, --insecure

(TLS). По умолчанию каждое SSL-соединение, проверяемое соединением, проверяется на безопасность. Эта опция позволяет curl продолжать и работать даже для соединений с сервером, в противном случае считается небезопасным.

Соединение с сервером проверяется, убедившись, что сертификат сервера содержит правильное имя и успешно проверяется с использованием хранилища сертификатов.

См. Этот онлайн-ресурс для получения дополнительной информации: https://curl.haxx.se/docs/sslcerts.html

Смотрите также --proxy-insecure и --cacert.

Ссылка упоминается в этой записи описывает некоторую станица руководства конкретного поведения -k.

Такое поведение можно наблюдать с curlзапросами на тестирование страниц с BadSSL.com

curl -X GET https://wrong.host.badssl.com/
curl: (51) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'

curl -k -X GET https://wrong.host.badssl.com/
..returns HTML content...
Freiheit
источник
11
Люблю тот факт, что у него есть вариант с одной буквой
kizzx2
Есть ли способ в конфигурации curl, чтобы сделать эту опцию по умолчанию?
Победа
4
@ Победа, это была бы ужасная идея. Право псевдоним, если вам нужно использовать его несколько раз, чтобы вы знали, что он делает, и случайно не отправлять ваши пароли в незашифрованном виде. alias insecure-curl="curl -k"
Александр Хуссах
2
@AlexanderHuszagh На работе я использую curl только с одного сервера с самозаверяющим сертификатом; я никогда не хочу проводить полную проверку сертификатов. То, что что-то кажется ужасной идеей, в большинстве случаев не означает, что это всегда так.
Даниэль Х
4
@DanielH Вот почему я предложил псевдоним: так что вы получите дополнительное удобство с явным знанием того, что это небезопасно. Рабочие процессы меняются: вы все же должны знать ограниченным образом, когда вы торгуете для безопасности.
Александр Хуссах
36

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

$ echo insecure >> ~/.curlrc

В Windows просто создать _curlrcтекстовый файл с «небезопасным» текстом в нем в вашем %HOME%, %CURL_HOME%, %APPDATA%, %USERPROFILE%или %USERPROFILE%\Application Dataкаталоге.

Преимущество использования вышеуказанного решения заключается в том, что оно работает для всех curlкоманд, но это не рекомендуется, поскольку оно может вводить атаки MITM при подключении к незащищенным и ненадежным хостам.

kenorb
источник
72
Это кажется плохим советом: отключение этих проверок для всех соединений не должно быть по умолчанию, даже если вы делаете это для себя через индивидуальную конфигурацию пользователя. Если вам нужно подавить проверки безопасности, сделайте это хотя бы по частям.
Кристофер Шульц
4
Каждый раз, когда я использую curl, я либо контролирую, либо доверяю машине на другом конце.
Эрик Хартфорд,
11
@EricHartford: Хорошо, хорошо для вас, но это все же не делает его хорошим общим советом. Можно использовать curl, например, при загрузке homebrew на osx и получить модифицированную версию инструментов, потому что он включил это по умолчанию вслепую.
14:02
10
Кроме того, @EricHartford, ты уверен, что всегда делаешь надежные локоны? Вы когда-нибудь запускали скрипт установки bash, который вы отключили от интернета? Конечно, вы все равно можете быть там в черном, но это увеличивает шансы.
Златко
это настоящий @EricHartford. Предыдущее сообщение было опубликовано кем-то другим, выдавая себя за меня. Потому что я доверял всем машинам ;-)
Ананд Рокзз
5

Вы используете самоподписанный сертификат. Почему вы не добавили CA в свой доверенный комплект CA (Linux) или не добавили в доверенное хранилище сертификатов (windows)? Или просто используйте --cacert /Path/to/fileс содержимым вашего доверенного самозаверяющего файла сертификата.

Другие ответы отвечают на вопрос на основе wgetсопоставимых. Однако истинный вопрос заключается в том, как сохранить доверенное соединение с помощью самозаверяющего сертификата curl. Основываясь на многих комментариях, безопасность является главной заботой любого из этих ответов, и лучшим ответом будет доверять самоподписанному сертификату и оставить curlнетронутыми проверки безопасности.

user3258557
источник