Tutorial

Защита Nginx с помощью Let's Encrypt в Ubuntu 20.04

Published on June 11, 2020
Русский
Защита Nginx с помощью Let's Encrypt в Ubuntu 20.04

Введение

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

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

Вместо файла по умолчанию мы будем использовать отдельный файл конфигурации сервера Nginx. Мы рекомендуем создавать новые файлы серверных блоков Nginx для каждого домена, потому что это помогает избежать распространенных ошибок и сохранять файлы по умолчанию в качестве резервной конфигурации на случай отката.

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

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

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

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

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

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

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

Первый шаг для получения сертификата SSL от Let’s Encrypt — установить на сервере программное обеспечение Certbot.

Установите Certbot и его плагин Nginx с помощью apt:

  1. sudo apt install certbot python3-certbot-nginx

Теперь Certbot готов к использованию, но для автоматической настройки конфигурации SSL для Nginx нам нужно частично проверить конфигурацию Nginx.

Шаг 2 — Настройка конфигурации Nginx

Чтобы настраивать SSL автоматически, Certbot необходимо найти правильный серверный блок в вашей конфигурации Nginx. Для этого нужно найти директиву server_name, соответствующую домену, для которого вы запрашиваете сертификат.

Если вы выполнили процедуру настройки серверного блока в обучающем модуле по установке Nginx, серверный блок для вашего домена должен располагаться по адресу /etc/nginx/sites-available/example.com с уже настроенной директивой server_name.

Для проверки откройте файл конфигурации вашего домена в nano или другом предпочитаемом текстовом редакторе:

  1. sudo nano /etc/nginx/sites-available/example.com

Найдите существующую строку server_name. Конфигурация должна выглядеть следующим образом:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Если все нормально, закройте редактор и переходите к следующему шагу.

Если нет, проведите обновление. Затем сохраните файл, закройте редактор и проверьте синтаксис внесенных правок конфигурации:

  1. sudo nginx -t

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

  1. sudo systemctl reload nginx

Теперь Certbot сможет найти правильный серверный блок и автоматически обновлять его.

Теперь изменим настройки брандмауэра, чтобы он разрешал трафик HTTPS.

Шаг 3 — Доступ к HTTPS через брандмауэр

Если вы включили брандмауэр ufw в соответствии с предварительными требованиями, вам нужно будет настроить его так, чтобы разрешить трафик HTTPS. К счастью, при установке Nginx регистрирует в ufw несколько профилей.

Вы можете просмотреть текущие настройки с помощью следующей команды:

  1. sudo ufw status

Возможно профиль будет выглядеть так, т. е. на веб-сервере будет разрешен только трафик HTTP:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

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

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

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

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Запустим Certbot и доставим наши сертификаты.

Шаг 4 — Получение сертификата SSL

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

  1. sudo certbot --nginx -d example.com -d www.example.com

Эта команда запускает certbot с плагином --nginx, используя опцию -d для указания доменных имен, для которых мы хотим использовать сертификат.

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

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

Output
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):

Выберите желаемый вариант, после чего нажмите ENTER. Конфигурация будет обновлена, а Nginx перезагрузится для получения новых настроек. Затем certbot завершит работу и выведет сообщение, подтверждающее завершение процесса и указывающее место хранения ваших сертификатов:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. 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" - 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.

В заключение протестируем процесс обновления.

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

Сертификаты Let’s Encrypt действительны только в течение 90 дней. Это сделано для стимулирования пользователей к автоматизации процесса обновления сертификатов. Установленный нами пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.

Вы можете запросить статус таймера с помощью команды systemctl:

  1. 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 Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

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

  1. sudo certbot renew --dry-run

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

Заключение

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.