Статья также доступна на украинском (перейти к просмотру).
Содержание:
- Необходимые предпосылки
- Установка клиента для Let's Encrypt
- Настройка веб-сервера
- Настройка брандмауэра
- Процесс получения сертификата
- Автоматическое удлинение SSL сертификата
Одной из важнейших задач в вопросах защиты своего веб-сайта является настройка защищенного канала передачи данных между браузером и веб-сервером. Для того чтобы это реализовать необходимо наличие сертификата типа TLS/SSL, который может иметь значительную стоимость или быть бесплатным, но с определенными ограничениями в использовании. Для небольших проектов целесообразно использовать бесплатные Let’s Encrypt сертификаты, доля рынка которых по данным агентства W3Techs на декабрь текущего года составляет 63,1% в абсолютном измерении. Единственной сложностью их использования является необходимость выполнения определенных настроек на сервере в терминальном режиме, что позволило бы получить сертификат и в дальнейшем осуществлять операции автоматического обновления. Приведем пример выполнения таких настроек для веб-сервера Apache с помощью нашего сервера под управлением Ubuntu версии 24.04.
Необходимые предпосылки
Укажем необходимые параметры настроек, конфигурации оборудования и программного обеспечения, которые нам понадобятся для получения бесплатного сертификата Let’s Encrypt:
-
Настроенный сервер Ubuntu;
-
Пользователь с правами sudo;
-
Зарегистрированный домен в качестве примера нами будет использоваться my_domain;
-
Наличие субдомена www.my_domain;
-
Развернутый веб-сервер Apache, на котором находится файл виртуального хоста для зарегистрированного домена.
Если указанные предпосылки выполнены, то можно переходить к реализации следующих этапов.
Установка клиента для Let's Encrypt
Клиентская программа принимает все посреднические функции и помогает получить и в дальнейшем обслуживать сертификат. В качестве клиента используется программа Certbot и потому попытаемся ее установить на нашем сервере. Для этого воспользуемся возможностями репозитория Ubuntu.
Последовательность действий при этом будет следующим
-
Обновление индекса пакетов;
-
Запуск двух пакетов – для установки программы и ее интеграции с веб-сервером Apache.
Ответные команды:
$ sudoapt update $ sudoaptinstall certbot python3-certbot-apache
Если приложение успешно установлено, можно перейти к следующему этапу – настройке конфигурации веб-сервера.
Настройка веб-сервера
Задачей этого этапа будет проверка, и при необходимости установка правильных настроек виртуального хоста для веб-сервера Apache. Это позволит клиентской программе безошибочно определить нужный виртуальный хост в настройках веб-сервера.
Правильные настройки должны быть выставлены в конфигурационном файле /etc/apache2/sites-available/my_domain.conf зарегистрированного нами домена в разделе для виртуального хоста.
Проверить их можно с помощью следующей команды:
$ sudonano /etc/apache2/sites-available/your_domain.conf
Приведем эти параметры и их значение для нашего случая:
ServerName my_domain ServerAlias www.my_domain
Если значения указанных директив установлены верно, ничего изменять не нужно. В противном случае их нужно отредактировать, сохранить внесенные изменения и выйти из редактора.
Если в файл были внесены изменения, то его необходимо проверить на наличие синтаксических ошибок. Это можно сделать с помощью следующей команды
$ sudo apache2ctl configtest
Если все хорошо, должно появиться соответствующее сообщение. После этого можно обновить текущую конфигурацию путем перезагрузки сервера:
$ sudo systemctl reload apache
Теперь мы можем быть уверены, что клиентская программа правильно определит виртуальный хост, и поэтому можно переходить к следующему этапу настроек.
Настройка брандмауэра
Основная задача этого этапа – разрешить трафик по защищенному протоколу HTTPS.
Для начала нужно определить, какой профиль брандмауэра использует Apache в настоящее время. Это можно сделать путем проверки статуса приложения:
sudo ufw status
Если на выходе команды не будет выведен профильApache Full, то это будет означать, что сервером будет блокироваться трафик по защищенному протоколу, но разрешен по незащищенному. Для этого нужно добавить нужный профиль и удалить «обычный».
Добавить профиль можно с помощью команды:
$ sudo ufw allow 'Apache Full'
Теперь удалим ненужный профиль:
$sudo ufw delete allow 'Apache'
Проверим статус приложения:
$ sudo ufw status
Выход команды:
Output Status: active
To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)
Можно убедиться, что теперь трафик по протоколу HTTPS является разрешенным. После этого можно перейти к этапу непосредственного получения сертификата.
Процесс получения сертификата
Есть разные варианты получения сертификата от Центра сертификации Let’s Encrypt с помощью клиентской программы. В частности, это можно сделать с использованием соответствующего плагина веб-сервера Apache. Воспользуемся им и мы.
В терминале введем следующую команду:
$ sudo certbot --apach
При этом запустится управляющая программа, последовательно выводить в терминале уточняющие вопросы.
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): testing@my_domai
Вводим наш адрес электронной почты и подтверждаем свой выбор клавишей ввода. Адрес необходим для обратной связи между нами и Центром сертификации, в частности, для информирования о продлении действия сертификата и безопасности.
Следующий вопрос будет касаться нашего согласия на условия обслуживания в выбранном нами Центре, и если они нас устраивают, следует нажать клавишу Y (Yes).
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
После этого нам предложат предоставить свой электронный адрес Международной организации по защите цифровых прав EFF для периодического получения более принципиальной информации.
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
Отказываемся от предложения и продолжаем дальше.
Далее, на экран будет выведен список доменов, указанных в настройках виртуального хоста веб-сервера, которые мы настраивали ранее. Вопрос будет касаться нашего решения активировать HTTPS для указанных доменов.
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: my_domain 2: www.my_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Если мы хотим это сделать для всех выводимых ресурсов, то нажмите клавишу ввода. Но если только для избранных, то необходимо перечислить их номера в списке, разделяя их запятыми или шагом каретки.
Нажимаем клавишу Enter, после чего настройка клиента будет завершена. При этом будет выведено заключительное окно команды с информацией о местоположении файла сертификата и его ключе, сроке действия сертификата, уведомлении о порядке автоматического обновления сертификата клиентской программой и некоторой другой информации.
Output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/my_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/my_domain/privkey.pem This certificate expires on 2025-03-17. 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/my_domain-le-ssl.conf Successfully deployed certificate for www.my_domain.com to /etc/apache2/sites-available/my_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/my_domain and https://www.my_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
Теперь сертификат полностью установлен и сконфигурирован. Для того, чтобы проверить это достаточно заменить в адресной строчке браузера протокол для своего сайта с http на https. Если все хорошо, сайт будет работать по-прежнему, а с левой стороны его адреса появится изображение закрытого замка. Это и станет показателем его защиты.
Кроме того, вы всегда можете применить SSL Labs Server Test для проверки класса защиты и получения дополнительной информации о сертификате.
На завершающем этапе мы протестировали работу механизма автоматического продления срока действия нашего сертификата.
Автоматическое удлинение SSL сертификата
В отличие от многих платных SSL-сертификатов, срок действия сертификатов Центра Let’s Encrypt составляет всего три месяца. Certbot, осуществляя его автоматическое обновление с помощью сценария /etc/cron.d.
Для начала проверим статус сервиса, управляющего указанным сценарием. Это можно сделать с помощью следующей команды:
$ 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 2024-12-17 20:52:46 UTC; 4min 3s ago Trigger: Tue 2024-12-18 00:56:55 UTC; 4h 0min left Triggers: ? certbot.service Dec 17 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Запустим процесс обновления сертификата:
$ sudo certbot renew --dry-run
Выход команды:
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/my_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for my_domain and www.my_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/my_domain/fullchain.pem (success)
Можно убедиться, что какие-либо ошибки отсутствуют. Это означает, что автоматическое обновление также будет работать.
В случае появления каких-либо ошибок при выполнении автоматического обновления сертификата, на указанный вами Email-адрес будет направляться сообщение о необходимости обновить сертификат до указанной даты. Это позволит избежать просрочки документа при возникновении проблем с автоматическим обновлением.
Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения,
Дата: 18.12.2024 Автор: Александр Ровник
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus