ШПАРГАЛКИ
CI/CD
KUBERNETES
  • DOCKERFILE
  • DOCKER-COMPOSE
  • JENKINSFILE
  • JENKINS-PIPELINE
  • GITLAB CI/CD
  • GROOVIE
  • INSTALL
  • PODS
  • INGRESS

Let's Encrypt SSL/TLS-сертификат для Nginx

Как получить бесплатный SSL/TLS-сертификат от Let's Encrypt для своих сайтов под Nginx с помощью ACME клиента certbot. Подробности под катом...

Установим certbot и плагин для Nginx, чтобы он сам настроил нужные хосты в Nginx:

sudo apt install certbot python3-certbot-nginx

После установки - время получать сертификаты. Вызываем certbot и передаем ему информацию для генерации сертификата:

certbot --nginx -n --agree-tos -m <Ваш Email> -d <Ваше Доменное Имя>

--nginx - Заставляет плагин для Nginx перенастраивать хосты в конфигах Nginx (указывает пути до сертификатов, если нет секции для ssl, то создаст их для указанного домена)

-n - Не интерактивный режим, чаще используется для вставки в скрипты деплоя

--agree-tos - Согласие с ACME server's Subscriber Agreement (ToS - Terms of service)

-m - Ваш Email

-d - Ваше доменное имя

Теперь необходимо подтвердить права на указанное доменное имя. Для этого можно создать location в конфиге Nginx:

server {
    server_name <Ваше Доменное Имя>;
    location ~* ^/\.well-known/acme-challenge/<AUTH TOKEN BY CERTBOT>/$ {
        return 200;
    }
}

Некоторые подробности можно посмотреть на ServerFault

Подтвердить домен можно и с помощью TXT записи в DNS:

_acme-challenge.<Ваше Доменное Имя>.  IN TXT "<AUTH TOKEN BY CERTBOT>"

Пример:

_acme-challenge.example.org.   IN TXT "4sV67H271Eil3VHA-9TuXjANP6cP_uXmyJoTInalPaY"

Если у вас много поддоменов, то проще получить Wildcard-сертификат (на все поддомены), эта возможность появилась у Let’s Encrypt весной 2018 года.

certbot certonly --preferred-challenges=dns --agree-tos -m \
<Ваш Email> \
-d *. \
<Ваше Доменное Имя> \
-d \
<Ваше Доменное Имя> \
--manual --server https://acme-v02.api.letsencrypt.org/directory

certonly - Получить только сертификат (но не устанавливать/применять его)

--preferred-challenges - Подтверждение прав на домен удобнее проводить через DNS

--agree-tos - Согласие с ACME server's Subscriber Agreement (ToS - Terms of service)

-m - Ваш Email

-d - Ваше доменное имя с префиксом "*."

-d - Сразу следом указываем каноническое имя домена, если вы им пользуетесь

--manual - Получить сертификат вручную (без помощи плагина для nginx)

--server - Для Wildcard надо указать endpoint (возможные можно посмотреть тут)

Пример:

certbot certonly --preferred-challenges=dns --agree-tos -m \
example@example.org \
-d \
*.example.org \
-d \
example.org \
--manual --server https://acme-v02.api.letsencrypt.org/directory

Во время запуска этой команды добавьте по запросу две TXT-записи к своему домену, например:

_acme-challenge.example.org. 60  IN TXT "4RMgK51t1OMNHPJVmOsIPIIkBnad5oUxk_WK6FTmo1w"
_acme-challenge.example.org. 60  IN TXT "M5QE7dXdS0RDEZ2uAno-PEfkc_6x5HftXtNJpEd87mI"

После того как добавили указанные certbot ключи, подтвердите через него их корректность, если все верно, то он сохранит ваши сертификаты в своем каталоге.

Посмотреть список полученных сертификатов и срок их валидности можно так:

certbot certificates

PS: Если подтверждать домен через TXT запись, то большой шанс, что на новое продление сгенерится новый токен. Так что лучше через A запись подтверждать

Оцените статью

Еще никто не оставил комментарий. Будьте первым!