Let's Enctypt
Как получить публичный TLS сертификат на зарегистрированный DNS домен? Допустим у вас есть веб сервер, который вы хотите защитить с помощью HTTPS. Статья без nginx
Установим Let's Encrypt
Требования:
- nginx
- доступный порт http и https из Интернета
- DNS запись домена указывает на публичный адрес вашего веб сервера
Установим пакет
apt install certbot
Создадим директорию на веб сервере
mkdir -p /var/www/html/certbot/.well-known/acme-challenge/
Настроим nginx
/etc/nginx/sites-available/default
server {
listen 80;
# Let's Encrypt
server_name company.com site.company.com;
location /.well-known/acme-challenge/ {
default_type text/plain;
root /var/www/html/certbot;
try_files $uri =404;
}
}
Выпустим сертификат
certbot certonly --webroot -w /var/www/html/certbot -d site.company.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/site.company.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/site.company.com/privkey.pem
This certificate expires on 2022-11-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Плагин webroot содаёт временный файл для каждого из запрошенных вами доменов в ${webroot-path}/.well-known/acme-challenge
. Затем сервер проверки Let's Encrypt делает HTTP-запрос, чтобы проверить, что DNS для каждого запрошенного домена разрешается на сервер, на котором запущен certbot.
Посмотрим список сертификатов
certbot certificates
Проверим файлы сертифкатов на сервере
ls -la /etc/letsencrypt/live/site.company.com/
где:
- fullchain.pem - цепочка сертификатов включая домен
- privkey.pem - закрытый ключ
Проверим обновление сертификата
certbot renew --dry-run
Расписание на регулярное обновлений сертфиката
# /usr/lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot renew
[Timer]
OnCalendar=weekly
RandomizedDelaySec=12hours
Persistent=true
[Install]
WantedBy=timers.target
Запустим задачу обновления сертификата
systemctl start certbot.timer
Посмотрим статус задачи
systemctl list-timers
Включим сервис на авто запуск
systemctl enable certbot.service
systemctl enable certbot.timer
Добавим доступ простым аккаунтам к сертификатам и ключам
Поскольку по умолчанию доступ разрешён только root.
apt install acl
setfacl -R -d -m u:username:rX /etc/letsencrypt/
setfacl -R -m u:username:rX /etc/letsencrypt/
getfacl /etc/letsencrypt/
Дополнительные команды при обновелнии сертификата
Например перезапуск веб сервера
# /etc/letsencrypt/cli.ini
deploy-hook = "service nginx restart"
Цепочка доверия
Не забудьте проверить, что центр сертификации Let's Encrypt находится в доверенных на клиенте. Вы можете скачать PEM файлы для импорты в хранлище сертификата с https://letsencrypt.org/certificates/ .
Проверка Let's Encrypt
- https://letsdebug.net/
- https://unboundtest.com/
- https://check-your-website.server-daten.de/