Получение бесплатного SSL-сертификата от Let’s Encrypt

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

Чтобы получить бесплатный сертификат Let’s Encrypt, необходимо выполнить следующие действия:

  • установить клиента Certbot;

  • настроить конфигурацию Nginx;

  • настроить доступ к HTTPS через брандмауэр;

  • получить сертификат SSL;

  • проверить автоматическое обновление Certbot.

Установка клиента Certbot

Для установки клиента Certbot необходимо выполнить следующую команду:

sudo apt install certbot python3-certbot-nginx

После установки Certbot готов к использованию.

После этого необходимо настроить конфигурацию Nginx.

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

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

Откройте файл конфигурации вашего домена в текстовом редакторе (например, nano):

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

В строке server_name укажите зарегистрированное доменное имя, например:

server_name example.com www.example.com;

Сохраните изменения. После этого закройте редактор и проверьте синтаксис внесенных правок:

sudo nginx -t
Если отображается сообщение об ошибке, необходимо открыть файл серверного блока и проверить его на наличие ошибок или опечаток.

Для завершения необходимо перезагрузить Nginx для загрузки новой конфигурации:

sudo systemctl reload nginx

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

Настройка доступа к HTTPS через брандмауэр

Чтобы разрешить HTTPS-трафик на web-сервере, необходимо настроить брандмауэр.

Пример команды для просмотра текущих настроек брандмауэра ufw:

sudo ufw status

Если на web-сервере разрешен только 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)

Затем необходимо активировать профиль Nginx Full и удалить профиль Nginx HTTP. Пример команды для брандмауэра ufw:

sudo ufw allow 'Nginx Full'

sudo ufw delete allow 'Nginx HTTP'

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

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

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

Запустите Certbot с параметром --nginx, используя опцию -d, чтобы указать доменное имя, для которого нужно использовать сертификат, например:

sudo certbot --nginx -d example.com

Если 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):

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

По завершению этого процесса сертификаты загружены, установлены и активированы.

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

Сертификаты Let’s Encrypt действуют в течение 90 дней. Клиент Certbot добавляет таймер systemd, который запускается два раза в день и автоматически продлевает все сертификаты, срок действия которых составляет менее 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 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

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

sudo certbot renew --dry-run
Certbot будет автоматически продлевать сертификаты и перезагружать Nginx, чтобы изменения вступали в силу. Если процесс автоматического обновления не будет выполнен, то на указанный вами адрес электронной почты поступит сообщение с предупреждением о том, что срок действия сертификата подходит к концу.