- PVSM.RU - https://www.pvsm.ru -

Yet another инструкция по получению ssl-сертификата Let’s Encrypt

Тема получения сертификата Let's Encrypt уже подымалась на хабре (см. тут [1]), да и в сети можно найти много рецептов разного качества.

Читал я и ужасался: одни [2] пишут, что то нужно nginx или apache остановить («на пару минуточек всего»), другие [3] предлагают файлы подкладывать в папку веб-сервера (в соседней ssh-сессии), третьи — о том, как важно соблюсти правильный Content-type для файлов проверки домена…

Давайте попробуем обойтись без всего этого: чтобы не было мучительно больно ни на стадии установки, ни очередном продлении — даже если придётся обновлять сразу много доменов. Собственно, вот и вся цель моей небольшой заметки: это ни пошаговый степ-бай-степ, ни длинная теоретическая статья о том, как функционирует Let's Encrypt — просто описывается правильный на мой взгляд подход, который будет правилен для конфигурации любой сложности.

Вся суть в двух словах: пусть Let's Encrypt запустит веб-сервер на 9999 порту, а мы допишем конфиг nginx, чтобы он пробросил запрос на этот бекенд. Кому интересны детали — прошу под кат

Установка Let's Encrypt в настоящее время рекомендуется из репозитория на гитхабе:

git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt

Для некоторых операционок уже есть готовые пакеты (более того — вместо команды letsencrypt-auto (которая по сути есть лишь обёртка для letsencrypt) можно использовать letsencrypt), но установка из репозитория меня, как программиста вполне устраивает.

Далее — нужно подготовить наш сервер.

В принципе, всё, что от нас требуется — это чтобы по адресу mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE [4] отдавался заранее определённый контент с нужными заголовками.

Переложим эту работу на сам Let's Encrypt: пусть сам подымет на 127.0.0.1:9999 собственный веб-сервер, а мы — лишь допишем в конфиг nginx правило для проброса запросов на этот бекенд. Не нужно ни останавливать ничего, ни тем более создавать файлы вручную.

Итак. Создаём файл /etc/nginx/template/letsencrypt.conf следующего вида:

location ~ ^/(.well-known/acme-challenge/.*)$ {
    proxy_pass http://127.0.0.1:9999/$1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

И подключим в конфиг-файлы нужных поддоменов:

     include template/letsencrypt.conf;

Собственно, это всё. Дальше можно запустить одну-единственную команду — собственно запустить Let's encrypt:

letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d mydomain.tld -d www.mydomain.tld -d i1.mydomain.tld -d i2.mydomain.tld

Здесь я получаю сертификат сразу для четырёх поддоменов, указываю, что нужно запустить веб-сервер на порту 9999, согласиться с лицензионным соглашением. (В принципе, можно указать в командной строке е-мейл, чтобы вообще не пришлось в интерактивный режим входить и довносить эту информацию: читайте описание ключей в документации)

В принципе, больше описывать нечего. Как внести сертификат в конфиг-файл nginx достаточно хороших и правильных описаний.

Единственное — осталось добавить в cron команду автоматического продления:

letsencrypt renew >> /dev/null 2>&1

В getting-started приведены [5] другие примеры скриптов обновления, рекомендую посмотреть: можно предусмотреть допустим отправку письма в случае, если обновление закончилось неудачей или автоматически рестартовать демон веб-сервера.

Вот и всё. От себя добавлю, что очень не люблю быть в первых рядах новой технологии («пока не выйдет первый сервис-пак — нет смысла обновлять винду на новую»), но в принципе, вижу, что Let's Encrypt уже можно потихоньку начинать использовать в продакшн.

PS В качестве основы для своей заметки я взял статью [6] Дмитрия из его блога. Не знаю, есть ли он на хабре, в любом случае от меня — большое спасибо.

Автор: questor

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/hosting/115564

Ссылки в тексте:

[1] тут: https://habrahabr.ru/post/270273/

[2] одни: https://hellsman.ru/admin/linux/ustanovka-ssl-sertifikata-ot-letsencrypt-s-nginx-v-centos-7

[3] другие: https://mihanentalpo.me/2015/12/ssl-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82-lets-encrypt-%D0%BD%D0%B0-nginx/

[4] mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE: http://mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE

[5] приведены: https://letsencrypt.org/getting-started/

[6] статью: https://www.kami-no.ru/?p=94

[7] Источник: https://habrahabr.ru/post/279695/