Репутация веб-ресурсов во многом зависит от уровня безопасности и уровня защиты персональных данных на сервере.
В случае с сайтами речь идет о включении протокола HTTPS, а для этого требуется подключение сертификата SSL.
Мы будем устанавливать бесплатный сертификат от некоммерческого удостоверяющего центра Let’s Encrypt.
Готовый к эксплуатации веб-сервер необходимо подготовить к дальнейшей установке SSL:
перед началом процедуры требуется зарегистрировать домен. Сертификат выдается на определенное имя сайта.
1. В терминале (Alt+t) переходим под rootsudo 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.