Исключение SSL на локальном https-сервере в python

Я использую Windows 7 и Python 2.7 Я создал локальный https-сервер с URL-адрес перенаправления на сервер в качестве его IP-адреса. Я создал файл сертификата для https с помощью openssl. Все в порядке, но получает исключение SSL, когда он перенаправляет на локальный сервер https. Поскольку этот сервер создается локально, каждый раз, когда запускается мое приложение, поэтому мы не можем купить ssl-сертификат, поскольку URL-адрес перенаправления является IP-адресом системы. Я использовал это для создания локального сервера. Итак, как избежать этого исключения SSL.

2 ответа

Вы можете использовать в качестве обходного пути:

  • Используйте что-то вроде dyndns (или поддомен?) И купите сертификат SSL
  • Установите ваш сертификат SSL в браузере как проверенный сертификат

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

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

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

Однако гораздо разумнее указать IP-адрес какого-либо имени хоста (DynDNS, если это разрешено вашим ЦС, или поддомен домена, принадлежащего тому, кто запускает приложение). Например, компания под названием Example, владеющая example.com, может использовать webapp.example.com, указать ее на своем сервере и получить для этого сертификат. Тот, кто запускает сервер, должен будет развернуть этот сертификат, а ваше приложение должно быть разработано для его принятия. Вам потребуется один сертификат для каждого сайта клиента. Нет (безопасного) способа обойти это, если вы хотите, чтобы он работал в готовых браузерах.

Возможно, вы сможете упростить этот процесс, предоставив автоматизированные рабочие процессы для запроса сертификатов или даже создав собственную службу, похожую на dyndns, для своих клиентов, где они смогут зарегистрировать свое имя.yourservice.com, указать его на IP-адрес своего желания и получить сертификат для своего хозяина от вас. (Это требует от них большого доверия и является своего рода антипаттерном, но, возможно, наименее неприятным решением.) Вам все равно нужно убедиться, что у каждого клиента есть свой собственный сертификат. Самое главное, НЕ пытайтесь получить подстановочный сертификат для такого домена и распространять сертификат и закрытый ключ вместе с приложением. Любой, у кого есть копия вашего приложения, сможет атаковать "безопасные" соединения. Что еще более важно, как только CA узнает, ваш сертификат будет отозван, и это предотвратит доступ к сайту с очень резким предупреждением и никаким способом обойти предупреждение. И, вероятно, у вас возникнут проблемы с центром сертификации за нарушение соглашения с ними о защите личных ключей.

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

Другие вопросы по тегам