Введение
Let’s Encrypt – это Центр сертификации (CA), который предоставляет простой способ получения и установки бесплатных сертификатов TLS/SSL, тем самым обеспечивая зашифрованный HTTPS на веб-серверах. Он упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как для Apache, так и для Nginx.
В этом руководстве вы будете использовать Certbot для получения бесплатного SSL-сертификата для Nginx на Ubuntu 20.04 и настроите ваш сертификат для автоматического обновления.
В этом учебном пособии будет использоваться отдельный файл конфигурации сервера Nginx вместо файла по умолчанию. Мы рекомендуем создавать новые файлы блоков сервера Nginx для каждого домена, потому что это помогает избежать распространенных ошибок и поддерживать файлы по умолчанию как резервную конфигурацию.
Позвольте DigitalOcean беспокоиться о управлении Nginx и Let’s Encrypt. Платформа приложений DigitalOcean позволит вам развернуться прямо из GitHub за несколько минут. Платформа приложений также будет обрабатывать сертификаты SSL и маршрутизацию для вас.
Предварительные требования
Для выполнения этого руководства вам понадобится:
-
Один сервер Ubuntu 20.04, настроенный в соответствии с этим руководством по начальной настройке сервера для Ubuntu 20.04, включая пользователя с sudo-правами и настроенный брандмауэр.
-
Зарегистрированное доменное имя. В этом руководстве будет использоваться
example.com
. Вы можете приобрести доменное имя на Namecheap, получить бесплатное на Freenom или использовать регистратор доменов на ваш выбор. -
Должны быть настроены оба следующих DNS-записи для вашего сервера. Если вы используете DigitalOcean, пожалуйста, обратитесь к нашей документации по DNS для получения информации о том, как их добавить.
- Запись типа A с указанием
example.com
, указывающая на публичный IP-адрес вашего сервера. - Запись типа A с указанием
www.example.com
, указывающая на публичный IP-адрес вашего сервера.
- Запись типа A с указанием
-
Nginx установлен, следуя инструкции Как установить Nginx на Ubuntu 20.04. Убедитесь, что у вас есть блок сервера для вашего домена. В этом руководстве будет использоваться
/etc/nginx/sites-available/example.com
в качестве примера.
Шаг 1 — Установка Certbot
Первый шаг к использованию Let’s Encrypt для получения SSL-сертификата – установить программное обеспечение Certbot на ваш сервер.
Установите Certbot и его плагин для Nginx с помощью apt
:
Теперь Certbot готов к использованию, но для автоматической настройки SSL для Nginx нам нужно проверить некоторые настройки Nginx.
Шаг 2 — Подтверждение конфигурации Nginx
Чтобы Certbot мог найти правильный блок server
в вашей конфигурации Nginx и автоматически настроить SSL, он делает это, ища директиву server_name
, которая соответствует домену, для которого вы запрашиваете сертификат.
Если вы следовали шагу настройки блока сервера в руководстве по установке Nginx, у вас должен быть блок сервера для вашего домена в /etc/nginx/sites-available/example.com
соответствующе установленной директивой server_name
.
Чтобы проверить, откройте файл конфигурации вашего домена с помощью nano
или вашего любимого текстового редактора:
Найдите существующую строку server_name
. Она должна выглядеть примерно так:
Если она совпадает, выйдите из редактора и перейдите к следующему шагу.
Если этого не произошло, обновите его, чтобы соответствовать. Затем сохраните файл, выйдите из редактора и проверьте синтаксис ваших изменений в конфигурации:
Если возникла ошибка, откройте файл блока сервера снова и проверьте наличие опечаток или отсутствующих символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Nginx для загрузки новой конфигурации:
Теперь Certbot может автоматически найти правильный блок server
и обновить его.
Далее давайте обновим брандмауэр, чтобы разрешить трафик HTTPS.
Шаг 3 — Разрешение HTTPS через брандмауэр
Если у вас включен брандмауэр ufw
, как рекомендуется в предварительных руководствах, вам нужно настроить параметры для разрешения трафика HTTPS. К счастью, Nginx регистрирует несколько профилей с ufw
при установке.
Вы можете увидеть текущие настройки, набрав:
Вероятно, они будут выглядеть примерно так, что означает, что только трафик HTTP разрешен для веб-сервера:
OutputStatus: 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:
Теперь ваш статус должен выглядеть так:
OutputStatus: 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 и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, введите следующее:
Это запускает certbot
с плагином --nginx
, используя -d
для указания доменных имен, для которых мы хотели бы, чтобы сертификат был действителен.
Если это ваш первый запуск certbot
, вам будет предложено ввести адрес электронной почты и согласиться с условиями обслуживания. После этого certbot
свяжется с сервером Let’s Encrypt, затем запустит проверку для подтверждения того, что вы контролируете домен, для которого запрашивается сертификат.
Если это будет успешно, certbot
спросит, как вы хотели бы настроить ваши HTTPS-настройки.
OutputPlease 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
завершит сообщением о том, что процесс был успешным, и где хранятся ваши сертификаты:
OutputIMPORTANT 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 действительны только на девяносто дней. Это сделано для того, чтобы побудить пользователей автоматизировать процесс обновления своих сертификатов. Пакет certbot
, который мы установили, заботится об этом, добавляя таймер systemd, который будет запускаться дважды в день и автоматически обновлять любой сертификат, который истекает через тридцать дней.
Вы можете проверить статус таймера с помощью systemctl
:
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
:
Если вы не видите ошибок, значит, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Nginx, чтобы учесть изменения. Если автоматический процесс обновления когда-либо завершится неудачей, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупреждая вас, когда ваш сертификат приближается к истечению.
Заключение
В этом руководстве вы установили клиент Let’s Encrypt certbot
, загрузили SSL-сертификаты для вашего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас возникнут дополнительные вопросы о использовании Certbot, официальная документация – хорошее место для начала.