How To Secure Apache with Let’s Encrypt on Ubuntu

Linux admin

скопировано отсюда

Шаг 1 — Установка Certbot

Чтобы получить SSL-сертификат с Let’s Encrypt, вам необходимо установить программное обеспечение Certbot на вашем сервере. Для этого вы будете использовать репозитории пакетов Ubuntu по умолчанию.

Сначала обновите локальный индекс пакетов:

sudo apt update

Копировать

Вам понадобятся два пакета: certbot, и python3-certbot-apache. Последний представляет собой плагин, который интегрирует Certbot с Apache, позволяя автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды:

sudo apt install certbot python3-certbot-apache

Копировать

Вам будет предложено подтвердить установку, нажав Y, а затем ENTER.

Certbot теперь установлен на вашем сервере. На следующем шаге вы проверите конфигурацию Apache, чтобы убедиться, что ваш виртуальный хост настроен правильно. Это гарантирует, что certbotклиентский скрипт сможет обнаружить ваши домены и перенастроить ваш веб-сервер для автоматического использования вашего нового сгенерированного сертификата SSL.

Шаг 2 — Проверка конфигурации виртуального хоста Apache

Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot необходимо найти правильный виртуальный хост в ваших файлах конфигурации Apache. Доменные имена вашего сервера будут извлечены из директив ServerNameи , ServerAliasопределенных в вашем VirtualHostблоке конфигурации.

Если вы следовали шагу настройки виртуального хоста в руководстве по установке Apache , у вас должен быть настроен блок VirtualHost для вашего домена с , а также уже правильно настроенные директивы./etc/apache2/sites-available/your_domain.confServerNameServerAlias

Чтобы убедиться, что все настроено, откройте файл виртуального хоста для вашего домена с помощью nanoили предпочитаемого вами текстового редактора:

sudo nano /etc/apache2/sites-available/your_domain.conf

Найдите существующие ServerNameи ServerAliasлинии. Они должны быть перечислены следующим образом:/etc/apache2/sites-available/ваш_домен.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Если у вас уже есть ServerNameи ServerAliasнастроены таким образом, вы можете выйти из текстового редактора и перейти к следующему шагу. Если ваша текущая конфигурация виртуального хоста не соответствует примеру, обновите ее соответствующим образом. Если вы используете nano, вы можете выйти, нажав CTRL+X, затем Yи , ENTERчтобы подтвердить изменения, если таковые имеются. Затем выполните следующую команду, чтобы проверить ваши изменения:

sudo apache2ctl configtest

Вы должны получить Syntax OKв качестве ответа. Если вы получили ошибку, снова откройте файл виртуального хоста и проверьте наличие опечаток или пропущенных символов. После того, как синтаксис вашего файла конфигурации будет правильным, перезагрузите Apache, чтобы изменения вступили в силу:

sudo systemctl reload apache2

Благодаря этим изменениям Certbot сможет найти правильный блок VirtualHost и обновить его.

Далее вам нужно обновить брандмауэр, чтобы разрешить HTTPS-трафик.

Шаг 3 — Разрешение HTTPS через брандмауэр

Если у вас включен брандмауэр UFW, как рекомендовано в руководствах по предварительным требованиям, вам нужно будет настроить параметры, чтобы разрешить трафик HTTPS. После установки Apache регистрирует несколько различных профилей приложений UFW. Вы можете использовать профиль Apache Full , чтобы разрешить трафик HTTP и HTTPS на вашем сервере.

Чтобы узнать, какой тип трафика в настоящее время разрешен на вашем сервере, проверьте статус:

sudo ufw status

Если вы следовали одному из наших руководств по установке Apache, вы получите вывод, аналогичный следующему, что означает, что 80в настоящее время разрешен только HTTP-трафик на порту:

OutputStatus: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)

Чтобы разрешить HTTPS-трафик, разрешите профиль «Apache Full»:

sudo ufw allow 'Apache Full'

Затем удалите лишний профиль «Apache»:

sudo ufw delete allow 'Apache'

Ваш статус будет отображаться следующим образом:

sudo ufw status
OutputStatus: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)

Теперь вы готовы запустить Certbot и получить сертификаты.

Шаг 4 — Получение SSL-сертификата

Certbot предоставляет множество способов получения SSL-сертификатов через плагины. Плагин Apache позаботится о перенастройке Apache и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, выполните следующее:

sudo certbot --apache

Этот скрипт предложит вам ответить на ряд вопросов, чтобы настроить ваш SSL-сертификат. Сначала он попросит вас указать действительный адрес электронной почты. Этот адрес будет использоваться для уведомлений о продлении и уведомлений о безопасности:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain

После предоставления действительного адреса электронной почты нажмите , ENTERчтобы перейти к следующему шагу. Затем вам будет предложено подтвердить, согласны ли вы с условиями обслуживания Let’s Encrypt. Вы можете подтвердить, нажав Yи затем ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Далее вас спросят, хотите ли вы поделиться своим адресом электронной почты с Electronic Frontier Foundation, чтобы получать новости и другую информацию. Если вы не хотите подписываться на их контент, напишите N. В противном случае напишите Yи нажмите , ENTERчтобы перейти к следующему шагу:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

На следующем шаге вам будет предложено сообщить Certbot, для каких доменов вы хотите активировать HTTPS. Перечисленные доменные имена автоматически извлекаются из конфигурации вашего виртуального хоста Apache, поэтому важно убедиться, что у вас есть правильные ServerNameи ServerAliasнастроенные параметры на вашем виртуальном хосте. Если вы хотите включить HTTPS для всех перечисленных доменных имен (рекомендуется), вы можете оставить запрос пустым и нажать , ENTERчтобы продолжить. В противном случае выберите домены, для которых вы хотите включить HTTPS, перечислив каждое соответствующее число, разделенное запятыми и/или пробелами, затем нажмите ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

После этого шага настройка Certbot будет завершена, и вам будут представлены последние замечания о вашем новом сертификате и о том, где разместить сгенерированные файлы:

OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Ваш сертификат теперь установлен и загружен в конфигурацию Apache. Попробуйте перезагрузить ваш сайт с помощью https://и обратите внимание на индикатор безопасности вашего браузера. Он должен указывать, что ваш сайт надежно защищен, обычно это значок замка в адресной строке.

Вы можете воспользоваться тестом сервера SSL Labs, чтобы проверить класс вашего сертификата и получить подробную информацию о нем с точки зрения внешней службы.

На следующем и последнем этапе вы протестируете функцию автоматического продления Certbot, которая гарантирует, что ваш сертификат будет автоматически продлен до истечения срока его действия.

Шаг 5 — Проверка автоматического продления Certbot

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

Установленный вами пакет certbotзаботится об обновлениях, включая скрипт обновления в /etc/cron.d, который управляется systemctlслужбой под названием certbot.timer. Этот скрипт запускается дважды в день и автоматически обновляет любой сертификат, срок действия которого истекает в течение тридцати дней.

Чтобы проверить статус этой службы и убедиться, что она активна, выполните следующее:

sudo systemctl status certbot.timer

Ваш вывод будет похож на следующий:

Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

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

sudo certbot renew --dry-run
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Если вы не получили никаких ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы применить изменения. Если процесс автоматического обновления когда-либо даст сбой, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупреждая вас о том, что срок действия вашего сертификата скоро истечет.

Заключение

В этом руководстве вы установили клиент Let’s Encrypt certbot, настроили и установили SSL-сертификат для своего домена и подтвердили, что служба автоматического продления Certbot активна в systemctl. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала.