- LINUX
- GIT
- DOCKER
- DOCKERFILE
- DOCKER-COMPOSE
- DOCKERSWARM
- KUBERNETES
- ANSIBLE
- BASH
- 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 запись подтверждать