467 слов | 2 минуты

Certbot

В первую очередь нужно обновить индекс пакетов:

sudo apt update && sudo apt upgrade -y

Далее можно устанавливать Cerbot:

sudo apt install certbot python3-certbot-nginx

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

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

Для автоматизации всех действий с помощью certbot вы должны соблюдать некоторые правила при написании конфигурации виртуальных хостов nginx. Во-первых, серверный блок для домена, на который вы устанавливаете SSL-сертификат, должен располагаться по адресу /etc/nginx/sites-available/example.com. Во-вторых, в этом файле должна быть настроена директива server_name, которая будет соответствовать доменам, для которых мы настраиваем безопасное соединение.

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

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

Теперь найдите в нём строчку:

server_name [example.com](http://example.com/) [www.example.com](http://www.example.com/);

Если её нет, вы можете добавить директиву самостоятельно.

После того, как вы завершили проверку или обновление конфигурации, проверьте синтаксис nginx и перезагрузите веб-сервер:

sudo nginx -t
sudo systemctl reload nginx

Брандмауэр

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

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Проверка

sudo ufw status

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

С помощью плагина nginx certbot автоматически изменит конфигурацию нашего веб-сервера и перезагрузит её, когда это потребуется. Для установки сертификата с помощью плагина введите следующую команду:

sudo certbot --nginx -d [example.com](http://example.com/) -d [www.example.com](http://www.example.com/)

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

При первом запуске 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):

Первый вариант означает, что certbot не станет настраивать автоматическое перенаправление с адреса http:// на https://. Второй — что все запросы будут перенаправлены на безопасный протокол https. В большинстве случаев следует выбирать последний вариант, однако перед этим вы должны убедиться в том, что ваш сайт корректно работает с такими запросами. Если кодовая база ещё не подготовлена, выбирайте первый вариант, перенаправление можно настроить позже.

После выбора варианта, конфигурация обновится, а 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 2022-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

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

Автоматическое обновление сертификата

Certbot устанавливает сертификаты, которые действительны только в течение 90 дней. Это сделано для безопасности — разработчики из Let’s Encrypt стимулируют администраторов периодически обновлять ключи.

Однако certbot сам продлевает сертификаты, которые истекают менее, чем через 30 дней. Это происходит при помощи таймера systemd. Статус таймера вы можете узнать с помощью systemctl:

sudo systemctl status certbot.timer

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

sudo certbot renew --dry-run

Если ошибок нет, значит всё настроено корректно и работает правильно. При необходимости certbot сам установит новый сертификат и перезагрузит конфигурацию nginx.