Guzzle отключает проверку сертификата на false, насколько это небезопасно?

Недавно я обнаружил, что работаю с Guzzle, отправляя запросы на другой сервер для отправки и получения некоторых данных, в некоторых случаях токенов. Но я получал ошибку недействительного сертификата, и я даже пытался получить новый сертификат .pem, но Guzzle все еще не принимал и продолжал выдавать эту ошибку. Итак, наконец, я сделал то, что сказал Интернет:

$guzzleClient = new Client([
    'verify' => false
]);

Теперь, хотя это решение работает, я не уверен, насколько небезопасным оно может быть. Мне нужно беспокоиться? Если да, то в каких сценариях?


person Rohan    schedule 08.07.2020    source источник
comment
Спасибо большое, рад быть полезным   -  person RYOK    schedule 20.07.2020


Ответы (3)


ну это большая проблема если вы например

  1. наличие системы входа в систему по запросу, который вы отправляете с помощью guzzle
  2. с оплатой/выездом по запросу
  3. в основном любые конфиденциальные данные передаются на другой сервер

потому что, когда вы передаете данные без SSL-сертификата, ваши запросы могут быть перехвачены вредоносными программами, такими как

BurbSuite / WireShark , cain and abel / EtterCap 

поскольку эти программы являются Sniffing программами, и любой может получить версию из Интернета, поскольку они имеют открытый исходный код, и все, что происходит без SSL, может быть перехвачено хакером с помощью инструментов, упомянутых выше, и хакер может просмотреть весь запрос в открытый текст! поэтому настоятельно рекомендуется использовать SSL-соединение при передаче конфиденциальных данных.

Стоит упомянуть: в наши дни даже SSL не очень безопасен, потому что хакеры могут удалить его с помощью инструмента SSLStrip, но поверьте мне, SSL значительно усложнит им доступ к вашему запросу, потому что, если они использовали его, ваш сайт иногда будет незавершенным. запросы, и он уведомит пользователя о том, что сеть не защищена, это затруднит хакеру получение данных пользователя,

person RYOK    schedule 14.07.2020
comment
если вы когда-нибудь почувствуете, что вам нужно больше объяснений или примеров, пожалуйста, сообщите мне, и я предоставлю некоторые для вас, но я думаю, что идея очень ясна. - person RYOK; 14.07.2020
comment
Хорошо, небольшой побочный вопрос, скажем, запрос защищен SSL, снифферу сложно расшифровать данные, но что, если сниффер получит файл сертификата .pem, будет ли это очень легко для них? расшифровать запрос и просмотреть передаваемые данные? - person Rohan; 14.07.2020
comment
хорошо, если злоумышленник завладел сертификатом, тогда, если он опытный хакер, он может атаковать и обнюхивать данные, как если бы не было SSL-сертификата, но если хакер просто, например, обнюхивает данные по сети просто для развлечения, и он не изучал кибербезопасность, тогда это ничего не будет значить для него, и он не стал бы утруждать себя его использованием, чтобы сослаться на проверку здесь security.stackexchange.com/questions/16685/ - person RYOK; 14.07.2020
comment
Хорошо, у меня есть еще один пример, я использую curl и guzzle (который в любом случае использует curl внизу), и во многих сценариях я продолжаю получать ошибку curl 60, SSL-сертификат не найден/проверен/истек. Так много людей в Интернете указывают на это -› curl.haxx.se/docs/caextract.html и предложите использовать здесь файл cacert.pem. В некоторых местах я видел, как люди используют его и хранят публично, поскольку он уже является общедоступным файлом. Мой вопрос: в чем преимущество шифрования данных с использованием общедоступного файла pem? Как каждый может видеть сертификат, так какая польза от этого? - person Rohan; 15.07.2020
comment
я думаю, что файл, который они сохранили, как если бы его открытый файл содержал только открытый ключ сертификата, и даже если бы хакер получил его, это было бы бесполезно, потому что ему также нужен закрытый ключ, то, что я прокомментировал ранее, было, если бы хакер получил весь файл (открытый ключ + закрытый ключ), тогда он может выполнять MITM-атаку, сниффинг и т. д., но если у него есть только открытый ключ, то он не имеет для него значения, я хотел бы передать этот вопрос security.stackexchange.com/questions/160004/ - person RYOK; 16.07.2020
comment
в основном открытый ключ, как следует из названия, является его открытым, что означает, что клиент должен иметь право на чтение для него, поэтому механизм заключается в том, что ваш сервер отправляет открытый ключ, клиент проверяет открытый ключ, а затем клиент также отправляет свой открытый ключ после проверка того, что оба ключа действительны, оба они генерируют ключи сеанса, и эти ключи будут удалены в конце связи, эти ключи будут использоваться для шифрования/дешифрования всего в этом сеансе, который вы можете посмотреть здесь cloudflare.com/learning/ssl/how-does-ssl-work - person RYOK; 16.07.2020
comment
ОП говорит о не проверке сертификата, а не об отключении SSL. Так что на самом деле запросы используют SSL, просто ему все равно, подписан ли сертификат CA или нет, если проверка ложна. - person sykez; 17.07.2020

TLS/SSL в обычных конфигурациях дает вам три вещи:

  • конфиденциальность — никакая третья сторона не может прочитать отправленные и полученные сообщения,
  • целостность — никакая третья сторона не может изменить отправленные и полученные сообщения,
  • аутентификация сервера — вы знаете, с кем разговариваете.

То, что вы делаете с установкой verify на false, отключает проверку сертификата. Он немедленно отключает функцию аутентификации сервера, а также позволяет потерять конфиденциальность и целостность при столкновении с активным злоумышленником, имеющим доступ к вашему потоку данных.

Как это?

Во-первых, TLS/SSL опирается на инфраструктуру открытых ключей. Не вдаваясь в подробности: вы держите на своей машине набор сертификатов так называемых центров сертификации (ЦС), которым вы доверяете. Когда вы открываете новую связь со службой, вы получаете сертификаты служб и в процессе проверки проверяете, среди прочего, принадлежит ли сертификат ЦС, которому вы доверяете. Если да, то общение может продолжаться. Если нет, то канал связи закрыт.

Шаблоны атак

Отключение проверки сертификата позволяет проводить атаки «человек посередине» (MitM), которые легко могут быть выполнены в вашей локальной сети (например, через отравление ARP), в локальной сети службы, к которой вы звоните, или в сети между ними. Поскольку мы обычно не доверяем сети полностью, мы склонны проверять.

Представьте, что я атакую ​​вас. Я провел отравление ARP, теперь я вижу весь ваш трафик. Он зашифрован, не так ли? Ну, не очевидно. Рукопожатие TCP и TLS, которые, по вашему мнению, вы выполнили с целевой службой, вы выполнили со мной. Я предъявил вам не удостоверение целевой службы, так как не могу его подделать, а свое собственное. Но вы не подтвердили это, чтобы отклонить его. Я также установил соединение между мной и целевой службой от вашего имени, чтобы я мог просмотреть расшифрованный трафик, изменить при необходимости и ответить вам, чтобы вы поверили, что все в порядке.

Во-первых, все твои секреты принадлежат мне. Во-вторых, я могу проводить атаки как на вас, так и на целевой сервис (который мог бы быть защищен механизмами аутентификации, но сейчас это не так).

Как это исправить?

В XXI веке не должно быть особых причин отключать проверку TLS где бы то ни было. Однако настроить его для правильной работы может быть проблемой, особенно когда вы делаете это впервые. По моему опыту, наиболее распространенными проблемами в мире микросервисов являются:

  1. целевой сертификат является самоподписанным,
  2. у вас отсутствует корневой сертификат ЦС в хранилище доверенных сертификатов,
  3. микросервис предоставляет его сертификат, но не предоставляет промежуточный сертификат ЦС.

Трудно догадаться, в чем ваша проблема. Нам нужно копнуть глубже.

person Marek Puchalski    schedule 15.07.2020
comment
Так что это моя проблема -› github.com/guzzle/guzzle/issues/1935 и это, вероятно, решение -› github.com/guzzle/guzzle/issues/ 1935#issuecomment-371756738, но мой вопрос заключается в том, что рекомендуемый файл сертификата является общедоступным. Итак, когда guzzle (завиток внизу) отправляет запросы от одной из моих служб к другой, даже при использовании этого сертификата, безопасно ли это? Как будто этот pem-файл общедоступен, разве это не противоречит всей цели? - person Rohan; 15.07.2020
comment
Вот как работает асимметричная криптография. Один ключ закрытый, другой открытый. Когда вы определяете, кому вы доверяете, вы определяете это на основе открытой части ключа. Закрытый ключ служит для доказательства того, что открытый ключ принадлежит вам. Ну и частное есть частное. Вы не разделяете его. Надеюсь, он в целости и сохранности лежит на сервере. - person Marek Puchalski; 16.07.2020

В то время как другие ответы указывают на действительно хороший момент о том, насколько важен SSL / TLS, ваше соединение по-прежнему зашифровано, а используемая вами удаленная конечная точка также имеет https://. Таким образом, вы не полностью отключаете SSL, когда устанавливаете для проверки значение false, если я не ошибаюсь. Это просто менее безопасно, поскольку вы не проверяете сертификат удаленного сервера, если они подписаны центром сертификации (ЦС) с использованием пакета ЦС.

Нужно ли вам беспокоиться?

Если это что-то на вашем производстве, в идеале вы хотите, чтобы все было безопасно и правильно настроено, так что да. Не проверяя сертификат, как упомянул Марек Пухальски, существует вероятность того, что сервер может быть не тем, о котором вы думаете, и также допускает атаку mitm (человек посередине). Подробнее о mitm здесь и одноранговой проверке здесь.

Почему это происходит и как это исправить?

  • Наиболее распространенной проблемой является неправильно настроенный сервер, особенно конфигурация PHP. Вы можете исправить конфигурацию PHP, следуя этому руководству , где вы будете использовать добавление в конфигурацию комплекта корневых сертификатов ЦС. В качестве альтернативы вы можете добавить это в Guzzle.
  • Другая распространенная проблема заключается в том, что удаленный сервер использует самозаверяющий сертификат. Даже если вы настроили свой пакет ЦС в доверенном хранилище, этому сертификату нельзя доверять, поскольку он не подписан доверенным ЦС. Таким образом, серверу необходимо настроить SSL-сертификат, подписанный ЦС. Если это невозможно, вы можете вручную доверять этому корневому центру сертификации, однако это также связано с некоторыми проблемами безопасности.

Надеюсь, это помогло :)

person sykez    schedule 17.07.2020