Браузеры и поисковые системы ожидают HTTPS, а Let's Encrypt выдаёт сертификаты бесплатно. На VPS Linux Infrawire с AlmaLinux 9 Certbot может получить сертификат, изменить конфигурацию Apache и сам его продлевать. Те же шаги подходят для Rocky Linux 9.
📋 Требования
- VPS с AlmaLinux 9 и доступом root или sudo (IP и пароль в личном кабинете).
- Домен
example.com, A-запись (и AAAA для IPv6) которого указывает наVPS_IP. Сначала дождитесь распространения DNS. - Apache (httpd), отдающий сайт по HTTP на порту 80.
1. Установка Apache и открытие брандмауэра
Если Apache ещё не установлен, установите и запустите его. Затем откройте HTTP и HTTPS в firewalld; порт 80 нужен для проверки Let's Encrypt.
Bashdnf install -y httpd systemctl enable --now httpd firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload firewall-cmd --list-services
2. Создание виртуального хоста для домена
Certbot ищет ServerName, совпадающий с вашим доменом, поэтому создайте отдельный виртуальный хост.
Bashmkdir -p /var/www/example.com/public_html echo "Hello" > /var/www/example.com/public_html/index.html
Создайте /etc/httpd/conf.d/example.com.conf:
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5</VirtualHost>
Проверьте синтаксис и перезагрузите конфигурацию:
Bashapachectl configtest systemctl reload httpd
3. Установка Certbot и mod_ssl
Certbot берётся из репозитория EPEL. mod_ssl даёт модуль TLS для Apache и сертификат по умолчанию, без которого httpd не сможет слушать порт 443.
Bashdnf install -y epel-release dnf install -y certbot python3-certbot-apache mod_ssl
4. Запрос сертификата
Запустите Certbot с плагином Apache. Он проверит домен по HTTP, создаст новый виртуальный хост *-le-ssl.conf и при желании добавит перенаправление с HTTP на HTTPS.
Bashcertbot --apache -d example.com -d www.example.com
Укажите настоящий адрес e-mail (на него приходят предупреждения об окончании срока), примите условия и выберите перенаправление, когда спросят. Каждое имя, переданное через -d, должно указывать на этот сервер, иначе проверка не пройдёт.
Если SELinux работает в режиме enforcing (по умолчанию), для стандартной установки ничего особого не нужно. Не отключайте его ради обхода ошибки.
5. Проверка автоматического продления
Сертификаты Let's Encrypt действуют 90 дней. В AlmaLinux 9 пакет устанавливает таймер systemd, который срабатывает дважды в день и продлевает только сертификаты, срок которых близок к концу.
Bashsystemctl list-timers | grep certbot systemctl status certbot-renew.timer
Если таймера нет в списке, включите его:
Bashsystemctl enable --now certbot-renew.timer
Сымитируйте продление, не трогая настоящий сертификат:
Bashcertbot renew --dry-run
Последняя строка должна сообщать, что все имитированные продления прошли успешно. После настоящего продления Apache перезагружается автоматически.
Проверка
Bashcertbot certificates curl -I https://example.com curl -I http://example.com
Первая команда показывает домены и дату окончания срока. HTTPS-запрос должен вернуть 200, а HTTP-запрос должен ответить 301 на HTTPS-адрес. В браузере значок замка должен показывать действительный сертификат, выданный Let's Encrypt. Всю цепочку можно посмотреть командой openssl s_client -connect example.com:443 -servername example.com.
Устранение неполадок
- Проверка не пройдена или истекло время ожидания: DNS ещё не указывает на сервер или порт 80 закрыт. Проверьте
dig +short example.com,firewall-cmd --list-servicesи любой брандмауэр перед VPS. - Certbot не находит подходящий виртуальный хост:
ServerNameилиServerAliasв/etc/httpd/conf.d/не совпадает с указанным доменом. Исправьте, выполнитеapachectl configtestи повторите. Можно также использоватьcertbot certonly --apacheи настроить пути самостоятельно. - Слишком много сертификатов или неудачных проверок (лимит запросов): Let's Encrypt ограничивает повторные попытки. Сначала проверьте с
certbot --apache --dry-runи подождите перед новой попыткой. - Сайт недоступен на 443 после установки: HTTPS не открыт в firewalld или httpd не был перезагружен. Выполните
firewall-cmd --permanent --add-service=https,firewall-cmd --reloadиsystemctl restart httpd.
🔐 Ваш сайт на Apache в AlmaLinux 9 теперь работает по HTTPS и сам продлевает сертификат.