Let’s Encrypt — это центр сертификации (ЦС), позволяющий легко получать и устанавливать бесплатные сертификаты TLS/SSL, что позволяет использовать на веб-серверах шифрованный трафик HTTPS. Это упрощает процесс посредством предоставления программного клиента Certbot, который пытается автоматизировать большинство необходимых шагов (или все шаги). В настоящее время весь процесс получения и установки сертификата полностью автоматизирован — как в Apache, так и Nginx.
Шаг 1 — Установка Certbot
Первый шаг для получения сертификата SSL от Let’s Encrypt — установить на сервере программное обеспечение Certbot.
Установите Certbot и его плагин Nginx с помощью apt
:
Теперь Certbot готов к использованию, но для автоматической настройки конфигурации SSL для Nginx нам нужно частично проверить конфигурацию Nginx.
Шаг 2 — Настройка конфигурации Nginx
Чтобы настраивать SSL автоматически, Certbot необходимо найти правильный серверный
блок в вашей конфигурации Nginx. Для этого нужно найти директиву server_name
, соответствующую домену, для которого вы запрашиваете сертификат.
Если вы выполнили процедуру настройки серверного блока в обучающем модуле по установке Nginx, серверный блок для вашего домена должен располагаться по адресу /etc/nginx/sites-available/example.com
с уже настроенной директивой server_name
.
Для проверки откройте файл конфигурации вашего домена в nano
или другом предпочитаемом текстовом редакторе:
Найдите существующую строку server_name
. Конфигурация должна выглядеть следующим образом:
Если все нормально, закройте редактор и переходите к следующему шагу.
Если нет, проведите обновление. Затем сохраните файл, закройте редактор и проверьте синтаксис внесенных правок конфигурации:
Если вы получите сообщение об ошибке, откройте файл серверного блока заново и проверьте его на наличие опечаток или отсутствующих символов. Когда синтаксис файла конфигурации будет правильным, перезагрузите Nginx для загрузки новой конфигурации:
Теперь Certbot сможет найти правильный серверный
блок и автоматически обновлять его.
Теперь изменим настройки брандмауэра, чтобы он разрешал трафик HTTPS.
Шаг 3 — Доступ к HTTPS через брандмауэр
Если вы включили брандмауэр ufw
в соответствии с предварительными требованиями, вам нужно будет настроить его так, чтобы разрешить трафик HTTPS. К счастью, при установке Nginx регистрирует в ufw
несколько профилей.
Вы можете просмотреть текущие настройки с помощью следующей команды:
Возможно профиль будет выглядеть так, т. е. на веб-сервере будет разрешен только трафик HTTP:
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:
Теперь ваш статус должен выглядеть следующим образом:
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 и перезагрузит ее, когда это потребуется. Для использования этого плагина введите следующую команду:
Эта команда запускает certbot
с плагином --nginx
, используя опцию -d
для указания доменных имен, для которых мы хотим использовать сертификат.
Если это первый запуск certbot
, вам будет предложено указать адрес эл. почты и принять условия обслуживания. После этого certbot
свяжется с сервером Let’s Encrypt и отправит запрос с целью подтвердить, что вы контролируете домен, для которого запрашиваете сертификат.
Если это будет подтверждено, certbot
запросит у вас предпочитаемый вариант настройки 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):
Выберите желаемый вариант, после чего нажмите ENTER
. Конфигурация будет обновлена, а Nginx перезагрузится для получения новых настроек. Затем certbot
завершит работу и выведет сообщение, подтверждающее завершение процесса и указывающее место хранения ваших сертификатов:
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
:
● 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 отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.