На кофе

Поиск

Поиск Яндекс

Вход

Устанавливаем и автоматически продлеваем сертификаты ssl при помощи Lets Encrypt и Certbot на Astra Linux

Поделиться статьей
let's encrypt astra linux certbot astra linux

 

Репутация веб-ресурсов во многом зависит от уровня безопасности и уровня защиты персональных данных на сервере.

В случае с сайтами речь идет о включении протокола HTTPS, а для этого требуется подключение сертификата SSL.

Мы будем устанавливать бесплатный сертификат от некоммерческого удостоверяющего центра Let’s Encrypt.

Готовый к эксплуатации веб-сервер необходимо подготовить к дальнейшей установке SSL:

перед началом процедуры требуется зарегистрировать домен. Сертификат выдается на определенное имя сайта.

1. В терминале (Alt+t) переходим под root
sudo su

2. Добавим репозиторий AL1.7:
cat << EOF > /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 astra-ce
EOF

3. Разрешим установку пакетов со сторонних репозиториев

Комментируем содержимое /etc/apt/preferences.d/smolensk
cat << EOF > /etc/apt/preferences.d/smolensk
#Package: *
#Pin: release n=1.7_x86-64
#Pin-Priority: 900
EOF

4 Установим ключи для репозиториев Debian:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517

5. Подключаем репозиторий Debian 10, обновляем список доступных пакетов:

cat << EOF > /etc/apt/sources.list.d/buster.list
deb http://deb.debian.org/debian buster main contrib non-free
deb-src http://deb.debian.org/debian buster main contrib non-free
deb http://deb.debian.org/debian buster-updates main contrib non-free
deb-src http://deb.debian.org/debian buster-updates main contrib
EOF
sudo apt update

6. Установим необходимые пакеты:

sudo apt install certbot letsencrypt socat -fy

7. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:

certbot certonly --webroot --agree-tos --email --webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -d ...

* где:

    certonly — запрос нового сертификата;
    webroot — проверка будет выполняться на основе запроса к корню сайта;
    agree-tos — даем согласие на лицензионное соглашение;
    email — почтовый адрес администратора домена;
    webroot-path — каталог в системе Linux, который является корневым для сайта;
    d — перечисление доменов, для которых запрашиваем сертификат.

Пример команды для веб-сервера NGINX:

certbot certonly --webroot --agree-tos --email <domain-admin@mail> --webroot-path /usr/share/nginx/html/ -d <domain>

Пример команды для веб-сервера Apache:

certbot certonly --webroot --agree-tos --email <domain-admin@mail> --webroot-path /var/www/html/ -d <domain>

8. После успешного выполнения команды, сертификаты будут созданы в каталоге /etc/letsencrypt/archive/<domain>, а также симлинки на них в каталоге /etc/letsencrypt/live/<domain>

При настройке приложений, стоит указывать пути до симлинков, так как при обновлении файлы в первом каталоге будут меняться, во втором — нет.

Публичный ключ будет с именем fullchain.pem, а приватный — privkey.pem

Автоматическое продление

9. При помощи certbot мы можем выполнить обновление сертификата в автоматическом режиме.

Смотрим полный путь до скрипта certbot, он нам нужен для указания в планировщике:

which certbot

Открываем на редактирование cron и добавляем следующее:

crontab -e

10. Если crontab не установлен, устанавливаем пакет cron и запускаем сервис.

sudo apt install cron

sudo systemctl start cron

sudo systemctl enable cron

11. Прописываем следующую строку:

0 0 * * 2,4 /usr/bin/certbot renew --noninteractive

в указанном примере проверка и продление сертификата будет выполняться по вторникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который выдаёт команда which certbot из п.9.

Команда certbot renew проверяет для всех наших сертификатов срок окончания, если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<domain> и обновляет симлинк.

12. Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:

systemctl reload nginx

Для того, чтобы автоматически перезапускать приложения, отредактируем файл вручную:

mcedit /etc/letsencrypt/cli.ini

и добавим deploy-hook = systemctl reload nginx

или добавим в нем строку командой:

echo "deploy-hook = systemctl reload nginx" >>  /etc/letsencrypt/cli.ini

Обновление сертификата

13. Сертификатов от Lets Encrypt актуальны только 90 дней. До истечения срока (около 30 дней) рекомендуется их перевыпустить. Будем производить перевыпуск командой:

certbot renew

Эта команда проверит все сертификаты, установленные в системе и просроченые буде перевыпускать. Автоматизируем процесс командой в crontab:

crontab -e

15 3 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Эта команда будет выполнятся каждый понедельник в 3:15 и записывать свой вывод в файл /var/log/le-renew.log.