Одна команда для включения временной поддержки 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
: httpsto
: 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.
Наконец, он охватывал доступ к вашему приложению и его тестирование в браузере.
Спасибо за прочтение. Удачного дня!