2015-02-09 2 views
4

Я получаю предупреждение:Что означает Python InsecureRequestWarning?

/.../local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html 
    InsecureRequestWarning) 

Я читаю the doc.

Я вижу много сообщений о том, как отключить его, если я знаю, что я делаю, например this one.

Но у меня все еще есть проблемы с выяснением того, что означает ошибка. Я понимаю, что это означает, что мне не хватает сертификата (потому что это происходит только на моем VPS, а не на моем Mac, выполняющем ту же версию сценария), но Я не понимаю, зачем мне нужен сертификат для безопасного запрос к стороннему API.

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

ответ

5

Я рад, что вы не просто отключили предупреждение. Отличный вопрос, на самом деле! Вам не хватает базового понимания того, как работает «цепочка доверия» . Это не позор, многие люди, к сожалению, не знают об этом. Тем не менее, вы, как разработчик , нуждаетесь в, чтобы знать основы, действительно, пожалуйста! Идите дальше и читайте о том, как все это работает. Поисковые системы - ваш друг.

Короче говоря, шифрование TLS предназначено для обеспечения конфиденциальности, достоверности и целостности .. Здравый смысл в сообществе безопасности (*): без сертификата подтверждение вы получаете NONE из этих трех предметов, потому что вы уязвимы для человека в средних атаках. То есть, проверьте сертификат, или вы можете просто прекратить использование HTTPS. Вот что такое предупреждение.

Чуть больше контекста: часть этой архитектуры безопасности является то, что удаленный хост утверждает иметь сертификат подписанный кем-то выше в цепочке доверия, так называемый certificate authority (CA). Клиент должен подтвердить, что этот CA фактически подписал этот сертификат. Чтобы эта проверка работала, клиенту нужна локальная база данных с «ключами» многих ЦС.

Я не понимаю, почему мне нужен сертификат, чтобы сделать безопасный запрос к третьей стороне API

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

  • Ваш клиент не не доверяет удаленный конец.
  • Таким образом, вашему клиенту необходимо привлечь третью сторону и спросить о доверии к удаленному концу.
  • Эта сторонняя ваша локальная база данных открытых ключей многих ЦС, так называемый «комплект сертификатов».

Вы можете использовать библиотеку requests вместо urllib3, она выполняет проверку сертификата по умолчанию (и отправляет свою собственную базу данных ЦС).

(*) непроверенные соединения HTTPS может быть «лучше», чем простой HTTP, но это нужно оценивать в каждом конкретном случае.

+0

Полезно, спасибо. Разве библиотека запросов не использует urllib3 под капотом? Не смотря далее, предупреждение указывает на модуль, который представляется * в * пакете запросов. – HaPsantran

+0

Думаю, что да. HTTP-метод высокого уровня 'запросов' имеет параметр' verify', который по умолчанию установлен на 'True'. При использовании 'запросов', непроверенное соединение должно поднять' request.exceptions.SSLError', а не просто выводить предупреждение. –

+0

Yup, запросы использует urllib3. На самом деле, похоже, что op уже использует запросы. Вы правы, мы могли бы добавить дополнительные рекомендации о том, как решить, следует ли вам беспокоиться. Я приветствую вас, чтобы открыть вопрос или вытащить запрос с предложением. Главное: уверены ли вы, что ваше непроверенное соединение нельзя контролировать или вмешиваться? Например, если он выполняется только в локальной частной сети, не подверженной внешнему интернету. – shazow

Смежные вопросы