One place for hosting & domains

      Обеспечение безопасности Apache с помощью Let’s Encrypt в Ubuntu 20.04


      Введение

      Let’s Encrypt — это центр сертификации, упрощающий получение и установку бесплатных сертификатов TLS/SSL, обеспечивая шифрование HTTPS на веб-серверах. Это упрощает процесс посредством предоставления программного клиента Certbot, который пытается автоматизировать большинство необходимых шагов (или все шаги). В настоящее время весь процесс получения и установки сертификата полностью автоматизирован — как в Apache, так и Nginx.

      В этом руководстве мы будем использовать Certbot для получения бесплатного сертификата SSL для Apache в Ubuntu 20.04, и убедимся, что сертификат настроен на автоматическое обновление.

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

      Предварительные требования

      Для данного обучающего руководства вам потребуется следующее:

      • Один сервер Ubuntu 20.04, настроенный в соответствии с обучающим руководством Начальная настройка сервера Ubuntu 20.04, включая пользователя без прав root с привилегиями sudo и брандмауэр.

      • Зарегистрированное полное доменное имя. Во всем обучающем руководстве мы будем использовать your_domain в качестве примера. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.

      • На вашем сервере должны быть настроены обе нижеследующие записи DNS. В руководстве Введение в DigitalOcean DNS содержится подробная информация по их добавлению.

        • Запись A, где your_domain указывает на публичный IP-адрес вашего сервера.
        • Запись A, где www.your_domain указывает на публичный IP-адрес вашего сервера.
      • Apache, установленный в соответствии с указаниями руководства Установка Apache в Ubuntu 20.04. Убедитесь, что у вас имеется файл виртуального хоста для вашего домена. В этом обучающем руководстве мы будем использовать /etc/apache2/sites-available/your_domain.conf в качестве примера.

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

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

      Нам нужны два пакета: 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.conf​​​​​​ с ServerName, а также правильно заданные директивы ServerAlias.

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

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

      Найдите существующие строки ServerName и ServerAlias. Они должны выглядеть следующим образом:

      /etc/apache2/sites-available/your_domain.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 на сервере.

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

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

      Output

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

      Чтобы дополнительно активировать трафик HTTPS, разрешите профиль Apache Full и удалите лишний профиль Apache:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      Теперь ваш статус будет выглядеть следующим образом:

      Output

      Status: 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. Сначала он запросит действующий адрес электронной почты. Это письмо будет использоваться для уведомлений о продлении и безопасности:

      Output

      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. Вы можете подтвердить это, нажав A, а затем 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
      

      Далее вам будет предложено предоставить организации 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
      
      

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

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

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

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

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

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

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

      • sudo systemctl status certbot.timer

      Вывод будет выглядеть следующим образом:

      Output

      ● 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.

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

      • sudo certbot renew --dry-run

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

      Заключение

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



      Source link