Skip to content

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/

Источник 1