Localhost в опасности, или на Кинг-Стрит опять раздают SSL-сертификаты
Дело было в феврале 2019 года, когда некто сэр Нова Альтэс из Манчестера, его величества Соединенного Королевства, в одно воскресное и, непременно, дождливое британское утро, обзавелся новеньким SSL-сертификатом на имеющийся в его распоряжении домен localhost.direct. Однако приобретенный набор криптографических последовательностей сэр Альтэс намеревался использовать отнюдь не в целях безопасности личной коллекции Интернет-ресурсов, а в целях весьма благородных — пожертвовать приватный ключ мировому сообществу веб-разработчиков. И вот уже три года подряд сэр Альтэс исправно вносит весьма приличную для обычного программиста из северной Англии сумму фунтов стерлингов на счет центра сертификации Google Trust Services LLC, который, в свою очередь, с большой охотой продлевает срок действия сертификата еще на 12 месяцев, после чего мистер Нова загружает свежий приватный ключ в открытый доступ.
Что же такого особенного заключается в этом самом сертификате, и чем он может быть полезен сообществу IT? Для ответа на этот вопрос давайте обратим внимание на домен, для которого искомый сертификат, предназначается, а именно — localhost.direct:
$ nslookup localhost.direct ... Non-authoritative answer: Name: localhost.direct Address: 127.0.0.1
Аналогичный ответ от DNS мы получаем при проверке любого сабдомена следующего уровня:
$ nslookup whatever.localhost.direct ... Non-authoritative answer: Name: whatever.localhost.direct Address: 127.0.0.1
Нетрудно догадаться, что сэр Альтэс позаботился о том, чтобы домен localhost.direct
, ровно как и любой домен, подходящий под маску *.localhost.direct
, вели на 127.0.0.1
, то есть на сетевой интерфейс внутренней петли, он же localhost
. Поскольку соответствующие DNS-записи внесены в публичную базу DNS, а ключ SSL-сертификата находится в свободном доступе, — любой желающий имеет возможность защитить свой собственный localhost сертификатом, выданным авторитетным центром.
Демо
Скачаем с ресурса сэра Альтэса подписанный сертификат вместе с ключом и положим их в директорию ~/localhost.direct
:
$ mkdir -p ~/localhost.direct $ curl -o certs.zip -LOs https://aka.re/localhost $ unzip -P localhost certs.zip $ rm certs.zip $ ls localhost.direct.crt localhost.direct.key
Запустим контейнер nginx:alpine
, подложив внутрь nginx.conf
, подписанный сертификат и его ключ:
$ docker run --rm \ -v $PWD/nginx.conf:/etc/nginx/conf.d/default.conf \ -v $PWD/localhost.direct.crt:/etc/nginx/certs/localhost.direct.crt \ -v $PWD/localhost.direct.key:/etc/nginx/certs/localhost.direct.key \ -p 80:80 \ -p 443:443 \ nginx:alpine
Откроем https://localhost.direct в браузере. Сертификат работает.
— Вы уже скучаете по боли от самоподписанных сертификатов и паническим надписям «Connection is not secure»?
Пример роутинга по сабдоменам:
Идея проекта localhost.direct максимально проста и изящна. Kudos, сэр Альтэс!
Официальная страница проекта: https://get.localhost.direct.
Подпишись на телеграм «чевопса»
Девопс глазами программиста 👨💻
Практические примеры работы с Docker 🐳, Kubernetes ☸️ и облаками ☁️