Эта статья живет в:
- Dev.to
- Середина
- Гадость
- Документы Fastapi
вступление
Вот краткое введение в Https для разработчиков Отказ 🔒
Эта статья извлечена из Fastapi Docs О HTTPS Отказ
Я просто обновил эти документы с несколькими объяснениями и диаграммами, и я думал, что конечный результат — это розыгрыш и Полезно достаточно для многих других разработчиков (даже в других Языки и Рамки Несомненно Также публиковать его как пост, так вот оно. 🤓.
Это кому
Если вы Пользователь ваше единственное взаимодействие с HTTPS с браузер Открытие URL, то вам лучше просто читать Как работает HTTPS Отказ
Если вы Криптография Исследователь , вам лучше изучать криптографические примитивы, а затем чтение стандартов (RFC).
Но если вы Разработчик (программист, код кодера) и хотите знать Достаточно технических деталей Чтобы понять, как это работает и Как использовать HTTPS В ваших приложениях, не выходя в глубины криптографии и веб-стандартов, то это для вас! 🎉👇.
О https.
Легко предположить, что HTTPS — это то, что просто «включено» или нет.
Но это намного сложнее, чем это.
К Узнайте основы https , с точки зрения потребителей, проверьте https://howhttp.works/ Отказ
Теперь, от Перспектива разработчика Вот несколько вещей, чтобы иметь в виду, думая о HTTPS:
Для https, Сервер нужно иметь «сертификаты» генерируется третья сторона .
- Эти сертификаты на самом деле приобрел от третьей стороны, не «сгенерировано».
Сертификаты имеют Срок службы Отказ
- Они Истекает Отказ
- И тогда они должны быть Возобновить , Приобретено снова от третьей стороны.
Шифрование соединения происходит в Уровень TCP Отказ
- Это один слой ниже http Отказ
- Итак, Сертификат и шифрование Обработка сделана До HTTP Отказ
TCP не знает о «доменах» Отказ Только о IP-адресах.
- Информация о Конкретный домен Запрошенная идет в Http data Отказ
- HTTPS сертификаты «Сертифицировать» A определенный домен , но протокол и шифрование происходят на уровне TCP, перед знанием С какой домен рассматривается.
По умолчанию , это будет означать, что вы можете иметь только Один сертификат HTTPS на IP-адрес .
- Независимо от того, насколько велик ваш сервер или насколько у вас есть небольшое приложение.
- Есть решение К этому, однако.
Есть Расширение к TLS Протокол (тот, кто управляет шифрованием на уровне TCP, перед http) называется SNI Отказ
- Это расширение SNI позволяет одному серверу (с одним IP-адресом ), чтобы иметь Несколько сертификатов HTTPS и подавать Несколько доменов/приложений HTTPS . Для этого работать, а
- одинокий Компонент (программа) работает на сервере, прослушивание на Общественный IP-адрес Должно быть, есть Все сертификаты HTTPS на сервере. После
Получение безопасного соединения, протокол связи — Еще http Отказ Содержание
- зашифрован , хотя они отправляются с HTTP Protocol .
Это обычная практика, чтобы иметь Одна программа/HTTP-сервер работает на сервере (машина, хост и т. Д.) И Управление всеми деталями HTTPS : получение Зашифрованные запросы HTTPS , отправка Расшифрованные HTTP-запросы к фактическому приложению HTTP работает на том же сервере (приложение fastapi в этом случае), возьмите HTTP ответ из приложения шифровать это Использование соответствующих HTTPS сертификат и отправка его обратно клиенту, используя HTTPS. . Этот сервер часто называют TLS завершение прокси Отказ
Некоторые из вариантов, которые вы могли бы использовать в качестве прокси терминации TLS:
- Traefik (который также может обрабатывать продление сертификатов)
- Caddy (который также может обрабатывать продление сертификатов)
- Nginx.
- Haproxy.
Давайте Шифрование
Перед шифрованием, эти HTTPS сертификаты были проданы доверенными третьими лицами.
Процесс приобретения одного из этих сертификатов, используемых для громоздки, требуется довольно некоторых документов, и сертификаты были довольно дорогими.
Но тогда Давайте шифровать был создан.
Это проект из фундамента Linux. Это обеспечивает HTTPS Сертификаты бесплатно , в автоматическом порядке. Эти сертификаты используют всю стандартную криптографическую безопасность и недолгивают (около 3 месяцев), поэтому Безопасность на самом деле лучше из-за их уменьшенного продолжительности жизни.
Домены надежно проверены, и сертификаты генерируются автоматически. Это также позволяет автоматизировать продление этих сертификатов.
Идея состоит в том, чтобы автоматизировать приобретение и продление этих сертификатов, чтобы вы могли иметь Безопасные HTTPS, бесплатно, навсегда Отказ
Https для разработчиков на примере
Вот пример того, как может выглядеть API HTTPS, шаг за шагом, обращая внимание в основном на идеи, важные для разработчиков.
Доменное имя
Это, вероятно, все начнется с тобой приобретение некоторые Доменное имя Отказ Затем вы настроили его в DNS-сервере (возможно, ваш же облачный провайдер).
Вы, вероятно, получили бы облачный сервер (виртуальную машину) или что-то подобное, и у него будет Исправлено Общественный IP-адрес .
В DNS-сервере вы настраиваете запись (« » запись
«), чтобы указать Ваш домен до публики IP-адрес вашего сервера Отказ
Вы, вероятно, сделали бы это только один раз, в первый раз, когда все настроили.
Совет : Эта часть имени доменного имени — это путь до HTTPS, но, поскольку все зависит от домена и IP-адреса, стоит упомянуть его здесь.
Днс
Теперь давайте сосредоточимся на всех фактических частях HTTPS.
Во-первых, браузер проверит бы с DNS-серверы Что такое IP для домена в этом случае someapp.example.com
Отказ
DNS-серверы сообщит браузеру использовать некоторые конкретные айпи адрес . Это будет общедоступный IP-адрес, используемый вашим сервером, который вы настроили в DNS-серверах.
TLS начала рукопожатия
Браузер затем связывается с этим IP-адресом на Порт 443 (порт HTTPS).
Первая часть сообщения — только для установления связи между клиентом и сервером и решить криптографические ключевые ключи, которые они будут использовать и т. Д.
Это взаимодействие между клиентом и сервером для установления соединения TLS называется TLS рукопожатие Отказ
TLS с расширением SNI
Только один процесс На сервере можно прослушать определенные порт В определенном IP-адрес Отказ Могут быть другие процессы, слушающие другие порты в том же IP-адресе, но только один для каждой комбинации IP-адреса и порта.
TLS (HTTPS) использует конкретный порт 443
по умолчанию. Так что это порт, который нам понадобится.
Поскольку только один процесс можно прослушать на этом порте, процесс, который будет ли это TLS завершение прокси Отказ
Прокси терминации TLS будет иметь доступ к одному или нескольким TLS сертификаты (Сертификаты HTTPS).
Используя Расширение SNI Обсуждается выше, прокси терминации TLS проверит, какая из сертификатов TLS (HTTPS) позволяет использовать для этого соединения, используя тот, который соответствует домену, ожидаемому клиенту.
В этом случае это будет использовать сертификат для someapp.example.com
Отказ
Клиент уже Трасты Предприятие, которое создало этот сертификат TLS (в этом случае, давайте шифрование, но мы увидим об этом позже), так что это может проверить что сертификат действителен.
Затем, используя сертификат, клиент и прокси терминации TLS решить, как шифровать остальные TCP Communication Отказ Это завершает TLS рукопожатие часть.
После этого клиент и сервер имеют Зашифрованное TCP-соединение Это то, что обеспечивает TLS. И тогда они могут использовать это соединение, чтобы начать фактическое HTTP Communication Отказ
И это то, что Https это просто просто Http. внутри Безопасное соединение TLS Вместо чистого (незашифрованного) соединения TCP.
Совет : Обратите внимание, что шифрование связи происходит в Уровень TCP , не на уровне HTTP.
HTTPS запрос
Теперь, когда клиент и сервер (в частности браузер и прокси-сервер TLS) имеют Зашифрованное TCP-соединение они могут начать HTTP Communication Отказ
Итак, клиент отправляет HTTPS запрос Отказ Это просто HTTP-запрос через зашифрованное соединение TLS.
Расшифровать запрос
Прокси терминации TLS будет использовать шифрование, согласованное на расшифровать запрос и будет передавать Обычный (расшифрованный) HTTP-запрос Для процесса, выполняющего приложение (например, процесс с UVICORN, управляющий приложением Fastapi).
HTTP-ответ
Приложение будет обработать запрос и отправить Обычный (незашифрованный) ответ HTTP на прокси терминации TLS.
Ответ HTTPS.
Прокси терминации TLS будет тогда Зашифруйте ответ Используя криптографию договоренного ранее (которая началась с сертификата для Someapp.example.com
) и отправьте его обратно в браузер.
Затем браузер подтвердит, что ответ действителен и зашифрован правым криптографическим ключом и т. Д. Это тогда расшифровать ответ и обрабатывать это.
Клиент (браузер) будет знать, что ответ поступает из правильного сервера, потому что он использует криптографию, которую они согласились с помощью HTTPS сертификат до.
Несколько приложений
На одном сервере (или серверах) может быть Несколько приложений Например, другие программы API или база данных.
Только один процесс может обращаться с конкретным IP и портом (прокси TLS-завершения TLS в нашем примере), но другие приложения/процессы могут работать на сервере тоже, пока они не пытаются использовать то же самое . Сочетание публичного IP и порта Отказ
Таким образом, прокси терминации TLS может обрабатывать HTTPS и сертификаты для Несколько доменов Для нескольких приложений, а затем передают запросы на правильное приложение в каждом случае.
Обновление сертификата
В какой-то момент в будущем каждый сертификат будет Истекает (около 3 месяцев после его приобретения).
И тогда будет другая программа (в некоторых случаях это другая программа, в некоторых случаях это может быть одинаковым прокси TLS TLS), который будет говорить с шифрованием и продлевать сертификат (ы).
TLS сертификаты являются связано с доменом имени не с IP-адресом.
Итак, чтобы обновить сертификаты, программа обновления необходимо Доказать к полномочию (давайте шифрование), что это действительно «Есть» и контролирует этот домен Отказ
Для этого и для размещения различных потребностей приложений есть несколько способов это сделать это. Некоторые популярные способы:
Изменить некоторые записи DNS Отказ
- Для этого программа продления должна поддерживать API поставщика DNS, поэтому, в зависимости от поставщика DNS, который вы используете, это может или не может быть вариантом.
Запустить как сервер (по крайней мере, во время процесса сбора сертификата) на общедоступном IP-адресе, связанном с доменом.
- Как мы сказали выше, только один процесс можно прослушать на определенном IP и порту.
- Это одна из причин, почему это очень полезно, когда тот же прокси терминации TLS также заботится о процессе обновления сертификата.
- В противном случае, возможно, вам придется остановить прокси-сервер TLS-завершения TLS, запустите программу обновления, чтобы получить сертификаты, а затем настроить их с прокси-сервером TLS, а затем перезагрузите прокси TLS Closion. Это не идеально, так как ваше приложение (ы) не будет доступно в то время, когда прокси терминации TLS выключен.
Все это продление процесса, пока все еще обслуживающее приложение, является одной из главных причин, по которым вы хотели бы иметь Отдельная система для обработки HTTPS С прокси терминации TLS вместо просто используя сертификаты TLS с сервером приложений напрямую (например, UVicorn).
Реконструировать
Наличие Https очень важно, а вполне критический в большинстве случаев. Большинство усилий, которые вы, как разработчик, должны поставить в HTTPS, это только о Понимание этих концепций и как они работают.
Но как только вы узнаете основную информацию о Https для разработчиков Вы можете легко комбинировать и настроить различные инструменты, чтобы помочь вам управлять всем простым способом.
Узнать больше
Эта статья извлечена из Fastapi Документация о развертывании и HTTPS Отказ
Если вы хотите изучить конкретные примеры некоторых инструментов, которые вы можете использовать, и как настроить их для развертывания приложения Fastapi, ознакомьтесь с следующими главами в Документация Fastapi Отказ
Обо мне
Привет! 👋 Я Себастьян Рамирес ( Tiangolo ).
Вы можете следовать за мной, свяжитесь со мной, посмотрите, что я делаю или использую свой открытый исходный код:
- GitHub: Tiangolo.
- Twitter: Tiangolo.
- LinkedIn: Tiangolo.
- Dev: Tiangolo.to.
- Середина: Tiangolo.
- Веб: Tiangolo.com.
Оригинал: «https://dev.to/tiangolo/https-for-developers-1774»