• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Пошаговая инструкция по установке 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
navigate
go
exit
Спасибо, что выбираете FREEhost.UA