Перейти к основному содержанию

Let's Encrypt — настройка certbot в Ubuntu 22

let's encrypt

Установим и настроим certbot для получения и обновления SSL сертификатов Let's Encrypt. Операционная система Ubuntu 22.04.4, веб-сервер Nginx.

Настраивать будем на примере развёрнутого SeaFile.

Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован. https://letsencrypt.org/

Веб сервер работает, сайт, для которого требуется выпустить SSL сертификат, открывается по HTTP.

ssl

Работаем в sudo.

Установка certbot

Устанавливаем пакет для certbot:

apt-get update
apt-get install certbot

ssl

Устанавливаем пакет для nginx:

apt-get install python3-certbot-nginx

ssl

Запускаем:

certbot run --nginx

Указываем e-mail администратора сертификатов Let's Encrypt. Принимаем лицензионное соглашение и отвечаем на вопросы.

ssl

Скрипт выводит список доменов, которые он нашёл в Nginx. Указываем номер домена, для которого требуется сертификат. В данном случае пишем "1". Enter.

Если домены не нашлись, то ваш nginx, скорее всего, настроен на обслуживание любых доменов. В этом случае название домена нужно указать вручную.

ssl

Скрипт отработал, сгенерировал сертификаты (сроком на 3 месяца) и изменил конфигурационный файл сайта в nginx:

log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
        server_name files.internet-lab.ru;
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/files.internet-lab.ru/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/files.internet-lab.ru/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
        server_tokens off;
        proxy_set_header X-Forwarded-For $remote_addr;
        location / {
            ...
        }
        ...
}

server {
    if ($host = files.internet-lab.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name _;
    return 404;
}

Изменённые ботом строки подписаны:

# managed by Certbot

Приводим в порядок конфигурацию, иногда скрипт делает не то что надо.

Перезапускаем Nginx:

service nginx restart

Проверяем работу сайта по HTTPS:

ssl

Сайт работает.

Автоматическое обновление сертификатов

Срок действия SSL сертификатов Let's Encrypt — 3 месяца. Настроим автоматическое обновление.

certbot renew

ssl

Ошибок нет, наш сертификат не требует обновления. Проверим принудительное обновление:

certbot renew --force-renewal

ssl

Сертификат успешно обновляется. Certbot разрешает обновлять сертификат не чаще 5 раз в неделю. Если превысите лимит, то нужно ждать неделю.

Создаём сервис:

cd /etc/systemd/system/
vim certbot-renewal.service

Содержимое:

[Unit]
Description=Certbot Renewal
[Service]
ExecStart=/usr/bin/certbot renew --force-renewal --post-hook "systemctl reload nginx.service"

Обращаю внимание на опцию --post-hook, с помощью этой опции мы будем обновлять конфигурационный файл nginx после перевыпуска сертификата.

ssl

Создаём таймер.

vim certbot-renewal.timer

Содержимое:

[Unit]
Description=Timer for Certbot Renewal
[Timer]
OnBootSec=300
OnUnitActiveSec=1w
[Install]
WantedBy=multi-user.target

ssl

Включим таймер:

systemctl start certbot-renewal.timer

Автоматическое включение таймера:

systemctl enable certbot-renewal.timer

Статус таймера:

systemctl status certbot-renewal.timer

ssl

Последний запуск 19 секунд назад. Следующий через неделю.

Теги

 

Похожие материалы

Обновляем Nginx на Ubuntu Server 20.04 из репозитория

Пришла задачка — обновить nginx на одном из web серверов. Главное требование, обновиться нужно на версию не ниже 1.21, потому что в более ранних версиях обнаружена какая-то уязвимость.

Теги

Заглушка для технических работ на Nginx

Иногда сайт нужно вывести из эксплуатации для проведения технических работ. Это может быть процесс резервного копирования, обновление, изменение конфигурации, перенос данных, или восстановление.

Теги