Бесплатный SSL в три клика, навечно.

Я работаю с let’s encrypt примерно с апреля этого года, выписывая сертификаты в больших количествах (много тысяч, постоянно добавляются новые).
Изначально это выглядело примерно так: одна программа составляет список доменов для которых нужен сертификат, вторая программа идёт и эти сертификаты выписывает, третья проверяет выписанные сертификаты и составляет их список для haproxy/nginx (потому что с неправильными сертификатами они не перезапустятся при обновлении списка сертификатов и все https-сайты лягут). Работает это вполне надёжно, но получается много компонентов.

бесплатный SSL

Кроме того запуск этого чуда на windows + iis оказался нетривиальным и там коллега придумывал дополнительные костыли.

Требования:

1. Со стороны клиента поддержка SNI (основными браузерами давно поддерживается).
2. Со стороны сервера: чтобы туда можно было из golang бинарник скомпилировать (windows,linux,freebsd,mac). Проверяется на windows и linux.
3. Домен соответствует правилам Lets encrypt, на данный момент это: длина домена 64 символа или короче, без punycode (т.е. что-то.рф сертификата не получит).
4. Сервер с сайтом доступен из публичной сети.

[ad name=»Responbl»]

Принцип работы:

Программа работает как реверс-прокси, выписывая правильные сертификаты на ходу по мере необходимости.

При получении запроса через расширение SNI программа узнаёт домен для которого нужен сертификат. Если сертификат уже есть — дальше идёт обработка с уже существующим сертификатом.

Если сертификата нет — отправляется запрос в lets encrypt на получение сертификата из SNI-заголовка и потом обработка идёт с только что полученным сертификатом (сертификат сохраняется в кеш).

В lets encrypt домен проверяется методом tls-sni-01 — путём выдачи сертификата на специально сформированный https-запрос.

Время на все проверки и получение сертификата — около 3 секунд. Это задержка для первого https-запроса к домену.

Дальше запрос уходит на тот же IP, на котором был принят https-запрос, но уже на порт 80 и без шифрования — т.е. обычный http.

» github.com/rekby/lets-proxy/releases/latest

Несмотря на простоту варианта по умолчанию у программы много ключей запуска для определения нюансов работы. Для полного перечня можно воспользоваться ключем —help.

 

Click to rate this post!
[Total: 9 Average: 4.8]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Leave a reply:

Your email address will not be published.