Одна команда для включения временной поддержки SSL

Прочитав эту статью, вы научитесь проксировать HTTPS-трафик на любой из ваших существующих HTTP-серверов с помощью всего одной команды. Это очень удобно, особенно когда вы разрабатываете прототип на удаленном компьютере, который работает только в безопасном контексте (HTTPS).

Допустим, вы создаете потоковую платформу, которая использует MediaDevices.getUserMedia() во внешнем приложении. Эта функция работает только тогда и только тогда, когда приложение обслуживается через HTTPS или доступно через localhost. Для сервера разработки, расположенного на удаленной машине, вы можете использовать ssl-proxy в качестве временного решения и вместо этого потратить оставшиеся усилия и время на разработку.

Согласно официальной документации, ssl-proxy - это

«… Удобный и простой способ добавить SSL к вашей вещи, работающей на виртуальной машине - будь то ваш личный блокнот jupyter или экземпляр вашей команды jenkins. ssl-proxy автоматически генерирует сертификаты SSL и передает HTTPS-трафик на существующий HTTP-сервер с помощью одной команды ».

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

  • отстает от Nginx
  • бежит за CDN
  • работает с сертификатом и закрытым ключом, сгенерированным Let's Encrypt.

Переходим к следующему разделу по настройке и установке.

Настраивать

Вы можете выбрать:

  • загрузите предварительно созданный двоичный файл на основе вашей операционной системы
  • собрать пакет из исходников

Предварительно созданный двоичный файл

Вы можете скачать готовый бинарный файл из официального репозитория в зависимости от вашей операционной системы:

Просто распакуйте файл, и вы можете использовать его в обычном режиме через:

./ssl-proxy

Кроме того, вы можете использовать wget для получения нужного двоичного файла в зависимости от вашей операционной системы:

wget -qO- "https://getbin.io/suyashkumar/ssl-proxy" | tar xvz

В качестве альтернативы можно использовать команду curl для непосредственного извлечения конкретного двоичного файла

curl -LJ "https://getbin.io/suyashkumar/ssl-proxy?os=linux" | tar xvz

Он принимает следующие варианты:

  • Дарвин
  • окна
  • linux

Сборка из исходников

Если в вашей операционной системе уже установлено docker-compose, вы можете собрать ее следующим образом:

docker-compose -f docker-compose.build.yml up

Он создаст новый двоичный файл в папке build в текущем рабочем каталоге.

Вы можете создать его локально с помощью make и dep. Все, что вам нужно сделать, это клонировать репозиторий и запустить команду make, чтобы построить его.

Реализация

Если у вас есть двоичный файл ssl-proxy в вашем рабочем каталоге, вы можете запустить его с помощью:

  • автоматически подписанные сертификаты
  • Давайте зашифруем SSL-сертификаты

Самоподписанные сертификаты

Допустим, у вас есть предварительно созданный двоичный файл Linux в текущем рабочем каталоге, выполните следующую команду, чтобы начать прокси-трафик HTTPS:

./ssl-proxy-linux-amd64 -from 0.0.0.0:4430 -to 127.0.0.1:8000
  • from: представить HTTPS-маршрут как обратный прокси-сервер
  • to: относится к HTTP-маршруту вашего приложения для разработки (сервер, блокнот jupyter и т. Д.)

В этом случае он будет проксировать внешний URL-адрес, работающий на порту 4430, на сетевой URL-адрес, работающий на порту 8000.

Просто измените URL-адрес в соответствии со своими потребностями. Вы можете опустить префикс http/https, так как по умолчанию он будет иметь следующий вид:

  • from: https
  • to: http

Во время первоначального запуска он сгенерирует самозаверяющий сертификат и закрытый ключ в текущем каталоге:

  • cert.pem
  • key.pem

Он будет повторно использовать те же файлы для последующего запуска.

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

  • сертификат
  • ключ

Например:

./ssl-proxy-linux-amd64 -cert cert.pem -key key.pem -from 0.0.0.0:4430 -to 127.0.0.1:8000

Давайте зашифруем SSL-сертификаты

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

  • защищенный домен для вашего приложения (работающий и общедоступный)
  • может подключаться к порту 443

Когда вы закончите с этим, вы можете запустить следующую команду для получения и обслуживания сертификата Let’s Encrypt (при условии, что ваш домен находится по адресу mydomain.com):

./ssl-proxy-linux-amd64 -from 0.0.0.0:443 -to 127.0.0.1:8000 -domain=mydomain.com

Тестовое задание

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

./ssl-proxy-linux-amd64 -from 0.0.0.0:4430 -to 127.0.0.1:8000

Вы должны увидеть на своем терминале следующий вывод:

Assuming -to URL is using http://
Proxying calls from https://0.0.0.0:4430 (SSL/TLS) to http://127.0.0.1:8080
...

Затем вы можете получить доступ к своему приложению в обычном режиме через (hostname относится к общедоступному IP-адресу удаленного компьютера):

https://<hostname>:4430

Во время первоначального запуска вы должны увидеть пользовательский интерфейс «Your Connection is Not Secure». Просто нажмите кнопку Advanced и примите сертификат. Если все пойдет правильно, приложение должно работать полностью в защищенном контексте (HTTPS).

Заключение

Подведем итоги тому, что вы узнали сегодня.

Эта статья началась с краткого введения в формулировку проблемы и то, как ssl-proxy можно использовать ее для решения.

После этого он продолжил пошаговое руководство по получению исполняемого двоичного файла на основе операционной системы.

Он перешел в раздел реализации, который подразделяется на самозаверяющий сертификат и сертификат Let's Encrypt.

Наконец, он охватывал доступ к вашему приложению и его тестирование в браузере.

Спасибо за прочтение. Удачного дня!

использованная литература

  1. Github - ssl-прокси