Создание сертификата LET’S ENCRYPT для APACHE в UBUNTU 20.04

HTTP-сервер Apache – наиболее распространенный веб-сервер в интернете. Он предоставляет множество полезных функций, включая динамическую загрузку модулей, надежную поддержку мультимедиа и широкую интеграцию с другим популярным программным обеспечением.

В этом мануале вы узнаете, как установить веб-сервер Apache на ваш сервер Ubuntu 20.04.

Требования

  • Сервер Ubuntu 20.04.
  • Пользователь с доступом к sudo (все действия руководства нужно выполнять в сессии этого пользователя).
  • Базовый брандмауэр.

Все необходимые инструкции можно найти в мануале по начальной настройке сервера.

Настроив свой сервер, войдите в сессию пользователя с доступом к sudo, чтобы начать работу.

1: Установка Apache

Пакет Apache есть в стандартном репозитории Ubuntu, потому его можно установить с помощью стандартного пакетного менеджера.

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

sudo apt update

А затем установите пакет apache2:

sudo apt install apache2

С помощью этой команды менеджер пакетов apt установит Apache и все его зависимости.

2: Настройка брандмауэра

Теперь нужно отредактировать настройки брандмауэра и открыть доступ к стандартному порту Apache. Если вы выполнили мануал по начальной настройке, сейчас UFW блокирует доступ к портам, которые не используются (в том числе и к портам веб-сервера).

Во время установки Apache регистрирует в UFW несколько своих профилей, которые упрощают процесс настройки портов веб-сервера.

Чтобы просмотреть профили приложений ufw, введите:

sudo ufw app list

Вы увидите список доступных профилей:

Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

Как видите, у вас есть три профиля Apache:

  • Apache: поддерживает трафик по порту 80 (стандартный порт).
  • Apache Full: открывает порты 80 и 443 (зашифрованный трафик TLS/SSL).
  • Apache Secure: поддерживает только шифрованный трафик TLS/SSL по порту 443.

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

sudo ufw allow 'Apache'

Убедитесь, что профиль включился:

sudo ufw status

Вы увидите такой вывод:

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

3: Проверка веб-сервера

После установки сервер Ubuntu 20.04 запускает Apache самостоятельно.

Чтобы убедиться, что веб-сервер запустился, запросите его состояние:

root@hellit: service apache2 status
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-23 22:36:30 UTC; 20h ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 29435 (apache2)
Tasks: 55 (limit: 1137)
Memory: 8.0M
CGroup: /system.slice/apache2.service
├─29435 /usr/sbin/apache2 -k start
├─29437 /usr/sbin/apache2 -k start
└─29438 /usr/sbin/apache2 -k start

Согласно этому выводу сервис работает правильно. Но лучше также запросить страницу Apache, чтобы подтвердить работу веб-сервера.

Чтобы открыть стандартную посадочную страницу Apache, укажите свой домен. Если у вас нет домена, укажите внешний IP-адрес своего сервера. Если вы не знаете свой IP-адрес, вы можете узнать его с помощью командной строки. Введите такую команду:

hostname -I

Вы получите список адресов, разделенных пробелами. Проверьте каждый полученный адрес в браузере, чтобы узнать, какой из них работает.

Также вы можете узнать свой IP, запросив его с помощью команды curl. Чтобы извлечь icanhazip.com (IPv4) с помощью curl, введите:

curl -4 icanhazip.com

Узнав свой внешний адрес, введите в браузер:

http://your_server_ip

Вы увидите стандартную страницу Apache для Ubuntu 20.04.

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

4: Управление процессами Apache

Теперь мы рассмотрим несколько базовых команд для управления веб-сервером с помощью systemctl.

Чтобы остановить сервер, введите:

sudo systemctl stop apache2

Чтобы запустить сервер, введите:

sudo systemctl start apache2

Для перезапуска используйте команду:

sudo systemctl restart apache2

Во время настройки Apache можно часто перезагружать, не сбрасывая соединений. Для этого нужно использовать команду:

sudo systemctl reload apache2

По умолчанию Apache запускается автоматически вместе с сервером. Чтобы удалить этот сервис из автозагрузки, отключите его:

sudo systemctl disable apache2

Чтобы добавить Apache в автозагрузку, используйте эту команду:

sudo systemctl enable apache2

5: Настройка виртуального хоста (рекомендуется)

На веб-сервере Apache вы можете использовать виртуальные хосты (в Nginx это блоки server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь используется условный домен your_domain, который вы должны заменить собственным доменом.

Apache Ubuntu 20.04 по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для обслуживания одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в  /var/www для сайта your_domain, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не отвечает другим сайтам.

Создайте каталог для your_domain.

sudo mkdir /var/www/your_domain

Затем задайте права на каталог с помощью переменной $USER:

sudo chown -R www-data:www-data /var/www/your_domain

Права должны быть установлены верно, если вы не меняли unmask, но на всякий случай вы можете ввести эту команду (тогда права на чтение, запись и выполнение будут только у владельца каталога, все остальные пользователи и групп смогут только читать его):

sudo chmod -R 755 /var/www/your_domain

Затем создайте образец страницы index.html с помощью nano или другого редактора:

sudo nano /var/www/your_domain/index.html

Вставьте в файл такой код HTML:

<html>
<head>
<title>Welcome to Your_domain!</title>
</head>
<body>
<h1>Success!  The your_domain virtual host is working!</h1>
</body>
</html>

Сохраните и закройте файл.

Чтобы Apache мог обслуживать этот контент, необходимо создать файл виртуального хоста с правильными директивами. Вместо того чтобы напрямую изменять конфигурационный файл по умолчанию, /etc/apache2/sites-available/000-default.conf, создайте новый файл /etc/apache2/sites-available/your_domain.conf:

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

Вставьте в файл следующий блок конфигураций. Он похож на конфигурации по умолчанию, но содержит правильный домен и каталог:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Обратите внимание: DocumentRoot содержит путь нового каталога, а ServerAdmin – новый адрес электронной почты администратора сайта your_domain. Мы также добавили в файл две директивы: ServerName определяет базовый домен, который должен соответствовать этому виртуальному хосту, а ServerAlias определяет алиасы.

Сохраните и закройте файл.

Включите файл с помощью a2ensite:

sudo a2ensite your_domain.conf

Отключите стандартный сайт, который определяется файлом 000-default.conf:

sudo a2dissite 000-default.conf

Проверьте ошибки в конфигурациях:

sudo apache2ctl configtest

Если ошибок нет, команда вернет такой вывод:

Syntax OK

Перезапустите Apache:

sudo systemctl restart apache2

Теперь Apache обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain.

6: Важные файлы и каталоги Apache

Контент

Контент сайта должен храниться в каталоге /var/www/html. По умолчанию из него обслуживается только стандартная страница Apache, которую вы видели ранее. Чтобы изменить корневой каталог сайта, отредактируйте настройки Apache.

Конфигурации

  • /etc/apache2: каталог Apache, в котором хранятся все конфигурационные файлы.
  • /etc/apache2/apache2.conf: главный конфигурационный файл, в котором находятся глобальные настройки Apache. Он отвечает за загрузку других файлов.
  • /etc/apache2/ports.conf: указывает порты, которые прослушивает Apache. По умолчанию веб-сервер прослушивает порт 80; также он может прослушивать порт 443 после включения модуля для поддержки SSL.
  • /etc/apache2/sites-available/: каталог, в котором хранятся все файлы виртуальных хостов. Apache не будет использовать их, пока они не связаны с каталогом sites-enabled (см. ниже). Обычно в этом каталоге происходит настройка виртуальных хостов.
  • /etc/apache2/sites-enabled/: хранит включенные виртуальные хосты. При запуске или перезапуске Apache читает конфигурационные файлы и ссылки в этом каталоге, чтобы скомпилировать конфигурации.
  • /etc/apache2/conf-available/, /etc/apache2/conf-enabled/: каталоги типа sites-available и sites-enabled, работают по тому же принципу. В conf-available хранятся фрагменты конфигураций, которых нет в виртуальном хосте. Файлы в conf-available включаются с помощью команды a2enconf и выключаются с помощью a2disconf.
  • /etc/apache2/mods-available/, /etc/apache2/mods-enabled/: также работают по принципу sites-available и sites-enabled. Эти каталоги содержат доступные и активные модули соответственно. Файлы с расширением .load содержат фрагменты для загрузки конкретных модулей. Файлы с расширением .conf хранят настройки этих модулей. Модули включаются и выключаются с помощью команд a2enmod и a2dismod.

Логи сервера

  • /var/log/apache2/access.log: по умолчанию каждый запрос к веб-серверу записывается в этом логе доступа (Apache можно настроить иначе).
  • /var/log/apache2/error.log: по умолчанию здесь записываются все сообщения об ошибках. Директива LogLevel в настройках Apache определяет, сколько данных будет вноситься в лог.

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

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

sudo apt install certbot python3-certbot-apache

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

sudo certbot --apache

Если вы запускаете certbot впервые, вам будет предложено ввести адрес электронной почты, который будет использоваться для отправки уведомлений об обновлениях и ошибках:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain

Введите адрес и нажмите Enter. После этого вам будет предложено принять условия использования Let’s Encrypt. Для этого нажмите А и 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

(A)gree/(C)ancel: A

Затем certbot спросит, хотите ли вы поделиться своим адресом электронной почты с 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):

Вы получите такой вывод:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Далее вам будет предложено указать, хотите ли вы, чтобы HTTP-трафик перенаправлялся на HTTPS. На практике это означает, что когда кто-то посещает ваш сайт по незашифрованным каналам (HTTP), они будут автоматически перенаправлены на HTTPS-адрес вашего сайта. Выберите 2, чтобы включить перенаправление, или 1, если вы хотите оставить HTTP и HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

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

Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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

Сертификаты будут загружены и установлены. Попробуйте перезагрузить свой сайт, указав https://, и обратите внимание на индикатор безопасности в браузере. Он должен указывать, что сайт надежно защищен (как правило, для этого используется зеленый замочек в адресной строке).

Если вы протестируете свой сервер с помощью SSL Labs Server Test, он получит оценку A.

Теперь давайте протестируем процесс обновления сертификата.

Проверка автоматического обновления сертификата

Сертификаты Let’s Encrypt действительны только в течение 90 дней. Потому лучше заранее автоматизировать процесс продления сертификата.

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

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

sudo systemctl status certbot.timer

Вы получите такой вывод:

certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
Triggers: ● certbot.service
Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Чтобы протестировать процесс обновления, запустите сухой прогон:

sudo certbot renew --dry-run

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

Заключение

Теперь веб-сервер Apache установлен и готов к работе. Вы можете обслуживать разные типы контента и внедрить множество технологий для положительного пользовательского опыта. В этом мануале вы научились устанавливать клиент certbot, загружать сертификаты SSL, настраивать Apache для поддержки этих сертификатов и тестировать автоматическое обновление сертификата.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Что будем искать? Например,Windows, Linux

Мы в социальных сетях