Введение
Let’s Encrypt — это центр сертификации (CA), который облегчает получение и установку бесплатных сертификатов TLS/SSL, тем самым обеспечивая шифрованный HTTPS на веб-серверах. Он упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как для Apache, так и для Nginx.
В этом руководстве вы будете использовать Certbot для получения бесплатного SSL-сертификата для Apache на Ubuntu и убедитесь, что этот сертификат обновляется автоматически.
Это руководство использует отдельный файл виртуального хоста вместо файла конфигурации по умолчанию Apache для настройки веб-сайта, который будет защищен Let’s Encrypt. Мы рекомендуем создавать новые файлы виртуальных хостов Apache для каждого домена, размещенного на сервере, поскольку это помогает избежать распространенных ошибок и сохраняет файлы конфигурации по умолчанию в качестве резервного варианта.
Как защитить Apache с помощью Let’s Encrypt на Ubuntu
- Установка Certbot
- Проверка конфигурации виртуального хоста Apache
- Разрешение HTTPS через межсетевой экран
- Получение SSL-сертификата
- Проверка автоматического обновления Certbot
Требования
Для выполнения этого руководства вам понадобится:
-
Один сервер Ubuntu, настроенный с пользователем, отличным от root, имеющим права администратора с помощью
sudo
и включенный брандмауэр. Вы можете настроить это, следуя нашему руководству начальная настройка сервера для Ubuntu. -
Полностью зарегистрированное доменное имя. В этом руководстве мы будем использовать your_domain в качестве примера. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или использовать регистратора доменных имен по вашему выбору.
-
Следующие два DNS-записи должны быть настроены для вашего сервера. Вы можете следовать инструкции по настройке DNS DigitalOcean для получения подробной информации о том, как их добавить.
- Запись A с
ваш_домен
, указывающая на публичный IP-адрес вашего сервера. - Запись A с
www.ваш_домен
, указывающая на публичный IP-адрес вашего сервера.
- Запись A с
-
Apache установлен согласно инструкции по установке Apache на Ubuntu. Убедитесь, что у вас есть файл виртуального хоста для вашего домена. В этом руководстве в качестве примера будет использоваться
/etc/apache2/sites-available/ваш_домен.conf
.
Шаг 1 — Установка Certbot
Для получения SSL-сертификата с Let’s Encrypt вам необходимо установить программное обеспечение Certbot на ваш сервер. Вы будете использовать стандартные репозитории пакетов Ubuntu для этого.
Сначала обновите локальный индекс пакетов:
Вам нужны два пакета: certbot
и python3-certbot-apache
. Последний является плагином, который интегрирует Certbot с Apache, позволяя автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды:
Вам будет предложено подтвердить установку, нажав Y
, а затем ENTER
.
Certbot теперь установлен на вашем сервере. На следующем шаге вы проверите конфигурацию Apache, чтобы убедиться, что ваш виртуальный хост настроен правильно. Это обеспечит возможность скрипту клиента certbot
обнаруживать ваши домены и автоматически перенастраивать ваш веб-сервер для использования нового сгенерированного SSL-сертификата.
Шаг 2 — Проверка конфигурации вашего виртуального хоста Apache
Для автоматического получения и настройки SSL для вашего веб-сервера, Certbot необходимо найти правильный виртуальный хост в файлах конфигурации Apache. Имя(а) домена вашего сервера будут извлечены из директив ServerName
и ServerAlias
, определенных в блоке конфигурации VirtualHost
.
Если вы следовали шагу настройки виртуального хоста в руководстве по установке Apache, то у вас должен быть блок VirtualHost, настроенный для вашего домена в файле /etc/apache2/sites-available/ваш_домен.conf
с уже установленными директивами ServerName
и ServerAlias
.
Чтобы подтвердить, что все настроено, откройте файл виртуального хоста для вашего домена с помощью nano
или другого предпочитаемого текстового редактора:
Nайдите существующие строки ServerName
и ServerAlias
. Они должны быть указаны следующим образом:
...
ServerName your_domain
ServerAlias www.your_domain
...
Если у вас уже настроены ServerName
и ServerAlias
таким образом, вы можете выйти из текстового редактора и перейти к следующему шагу. Если текущая конфигурация виртуального хоста не соответствует примеру, обновите ее соответственно. Если вы используете nano
, вы можете выйти, нажав CTRL+X
, затем Y
и ENTER
, чтобы подтвердить ваши изменения, если таковые имеются. Затем выполните следующую команду, чтобы проверить ваши изменения:
Вы должны получить ответ Syntax OK
. Если появится ошибка, повторно откройте файл виртуального хоста и проверьте на наличие опечаток или отсутствующих символов. После того как синтаксис файла конфигурации правильный, перезагрузите Apache, чтобы изменения вступили в силу:
С этих изменениями Certbot сможет найти правильный блок VirtualHost и обновить его.
Далее, вы обновите брандмауэр, чтобы разрешить трафик HTTPS.
Шаг 3 — Разрешение HTTPS через брандмауэр
Если у вас включен брандмауэр UFW, как рекомендуется в руководствах по предварительным условиям, вам нужно будет скорректировать настройки, чтобы разрешить трафик HTTPS. После установки Apache зарегистрирует несколько различных профилей приложений UFW. Вы можете использовать профиль Apache Full, чтобы разрешить как HTTP, так и HTTPS трафик на вашем сервере.
чтобы проверить, какой вид трафика в настоящее время разрешен на вашем сервере, проверьте статус:
Если вы следовали одному из наших руководств по установке Apache, у вас будет вывод, аналогичный следующему, что означает, что в настоящее время разрешен только HTTP-трафик на порт 80
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Чтобы разрешить HTTPS-трафик, разрешите профиль “Apache Full”:
Затем удалите избыточный профиль “Apache”:
Ваш статус будет отображаться следующим образом:
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 и перезагрузкой конфигурации по мере необходимости. Чтобы использовать этот плагин, выполните следующее:
Этот сценарий попросит вас ответить на ряд вопросов, чтобы настроить ваш 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 Server Test, чтобы проверить оценку вашего сертификата и получить подробную информацию о нем с точки зрения внешнего сервиса.
В последнем шаге вы проверите функцию автоматического обновления Certbot, которая гарантирует, что ваш сертификат будет автоматически обновляться до даты истечения срока действия.
Шаг 5 — Проверка автоматического обновления Certbot
Сертификаты Let’s Encrypt действительны в течение девяноста дней. Это направлено на стимулирование пользователей к автоматизации процесса обновления сертификатов, а также для обеспечения того, что неправильно используемые сертификаты или украденные ключи истекут скорее, чем позже.
Пакет certbot
, который вы установили, занимается обновлениями, включая сценарий обновления в /etc/cron.d
, который управляется службой systemctl
под названием 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
:
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, их документация — это хорошее место для начала.
Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu