Быстро, доступно, безопасно!
Магазин готовых сайтов

Установка SSL сертификата на AlmaLinux 8.10

Для работы по безопасному протоколу HTTPS потребуется SSL- сертификат, подписанный общепризнанным Центром Сертификации. Сертификат подтверждает браузеру, что это именно нужный сайт, а браузер отмечает это замком в адресной строке.

Настройка сервера на AlmaLinux 8.10 -> Установка SSL сертификата

Используем ЦС Let’s Encrypt. Для автоматизации выпуска и установку сертификата потребуется ACME-клиент Certbot.

Устанавливаем Certbot: dnf install snapd и включаем его: systemctl enable --now snapd.socket и создаем символическую ссылку: ln -s /var/lib/snapd/snap /snap далее snap install --classic certbot

Чтобы команду certbot можно было запускать: ln -s /snap/bin/certbot /usr/bin/certbot

Запрашиваем сертификат: certbot certonly --webroot -w /home/example/public_html -d example.com -d www.example.com

Итогом выполнения команды будет выпуск сертификата: Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
месторасположения сертификатов необходимо сохранить, они потребуются при настройке соответствующего виртуального хоста.

Полная информация о сертификате: openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -nooutсрок действия сертификата: openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

SSL сертификат выдается на 3 месяца, продление будет происходить автоматически. Проверить работу автоматического продления: certbot renew --dry-run

Установка SSL сертификата Cloudflare

При работе с Cloudflare выдачу и обновление SSL сертификатов обеспечивает Cloudflare. Однако, для того, чтобы трафик был зашифрован не только от клиента браузера до Cloudflare, но и от Cloudflare до вашего сервера необходимо получить сертификат, который выдает Cloudflare сразу на 15 лет. Выбираем в меню SSL/TLS -> Origin Server и нажимаем кнопку Create Certificate. Генерируем сертификат с ключом и вставляем полученные данные в следующие файлы.

Создаем файл сертификата: /etc/httpd/ssl/example.com/fullchain.pemсоздаем файл ключа: /etc/httpd/ssl/example.com/privkey.pemдобавляем данные в конфигурацию httpd соответствующего хоста: SSLCertificateFile /etc/httpd/ssl/example.com/fullchain.pem
SSLCertificateKeyFile /etc/httpd/ssl/example.com/privkey.pem


Установка Wildcard SSL-сертификата

Подстановочный SSL сертификат может потребоваться когда необходимо работать с разными поддоменами.

Устанавливаем плагин Certbot dns-rfc2136 и библиотеку python3-dns чтобы Certbot мог автоматически добавлять в BIND временные TXT-записи _acme-challenge.example.com через протокол RFC 2136. Это необходимо для выпуска и автоматического продления wildcard-сертификата *.example.com: dnf install python3-certbot-dns-rfc2136

Создаём отдельный секретный ключ, которым Certbot будет подтверждать право изменять TXT-запись в BIND: tsig-keygen -a hmac-sha256 acme-key.example.com > /etc/named/keys/acme-key.example.com.key

Если доменов с подстановочным сертификатом будет больше одного - создаем отдельный файл для списка ключей: install -o root -g named -m 0640 /dev/null /etc/named/acme-keys.conf

Размещаем в этом файле информацию о ключах: include "/etc/named/keys/acme-key.example.com.key";
include "/etc/named/keys/acme-key.example.net.key";
include "/etc/named/keys/acme-key.example.org.key";

В файл /etc/named.conf для подключения всех вышеуказанных ключей добавляем следующую строку: include "/etc/named/acme-keys.conf";Это упрощает добавление новых ACME-ключей. Директива include вставляет содержимое указанного файла в конфигурацию в месте подключения. Теперь этот файл можно генерировать автоматически.

В блок зоны example.com в файле списка зон /etc/named/zones.conf после строки file добавляем следующие строки:   update-policy {
      grant acme-key.example.com. name _acme-challenge.example.com. TXT;
  };

Проверяем конфигурацию BIND: named-checkconf

Если нет ошибок перезагружаем конфигурацию BIND: systemctl reload named

Создаём файл учётных данных Certbot из уже созданного TSIG-ключа: secret=$(sed -n 's/^[[:space:]]*secret[[:space:]]*"\([^"]*\)";[[:space:]]*$/\1/p' /etc/named/keys/acme-key.example.com.key); printf '%s\n' "dns_rfc2136_server = 127.0.0.1" "dns_rfc2136_port = 53" "dns_rfc2136_name = acme-key.example.com." "dns_rfc2136_secret = $secret" "dns_rfc2136_algorithm = HMAC-SHA256" | install -o root -g root -m 0600 /dev/stdin /etc/letsencrypt/rfc2136-example.com.ini

Должен появиться файл: /etc/letsencrypt/rfc2136-example.com.ini

Этот файл нужен Certbot как файл учётных данных для доступа к BIND через RFC 2136.

При выпуске или продлении сертификата Certbot читает из него адрес DNS-сервера, имя TSIG-ключа, алгоритм и секрет. Затем временно добавляет TXT-запись _acme-challenge.example.com, проходит проверку Let’s Encrypt и удаляет запись.

Сам BIND этот файл не использует. Он нужен только Certbot.

Проверяем выпуск wildcard-сертификата в тестовом режиме: certbot certonly --dry-run --cert-name example.com --key-type ecdsa --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136-example.com.ini -d example.com -d '*.example.com'

Если тестовый запуск прошел успешно, выпускаем рабочий wildcard-сертификат: certbot certonly --cert-name example.com --key-type ecdsa --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136-example.com.ini -d example.com -d '*.example.com'

Перезапускаем обе почтовые службы, чтобы они узнали о новом сертификате: systemctl restart dovecot postfix

Чтобы всё это работало автоматически необходимо создать deploy-hook, который будет запускаться после каждого успешного продления сертификата: cat > /etc/letsencrypt/renewal-hooks/deploy/20-reload-mail.sh <<'EOF'
#!/bin/bash

systemctl reload dovecot &&
systemctl reload postfix
EOF

И сделать файл исполняемым: chmod 700 /etc/letsencrypt/renewal-hooks/deploy/20-reload-mail.sh

Метки: ssl; almalinux

Опрос

Адаптирован ли ваш сайт для смартфонов и планшетов? (голосов: 35)

  • Да - 4 (11%)
  • Нет - 2 (6%)
  • Не знаю - 1 (3%)
  • Нет сайта - 28 (80%)