Как настроить Let's Encrypt SSL в Nginx на Ubuntu

В этом руководстве мы проведем вас через процесс настройки SSL-сертификатов Let's Encrypt для вашего веб-сервера Nginx.

Хорошо известно, что шифрование SSL/TLS вашего веб-сайта приводит к более высокому рейтингу в поиске и лучшей безопасности для ваших пользователей. Однако существует ряд барьеров, которые мешают владельцам веб-сайтов внедрять SSL. Двумя самыми большими препятствиями были стоимость и ручные процессы, связанные с получением сертификата. Но теперь, с появлением Let's Encrypt, они больше не являются проблемой. Let's Encrypt делает шифрование SSL/TLS доступным для всех. Let's Encrypt — это бесплатный, автоматизированный и открытый центр сертификации (ЦС). Да, именно так: SSL/TLS сертификаты бесплатно. Сертификаты, выданные Let's Encrypt, сегодня являются доверенными для большинства браузеров, включая более старые браузеры, такие как Internet Explorer в Windows XP SP3. Кроме того, Let's Encrypt полностью автоматизирует как выпуск, так и продление сертификатов. В этой статье мы рассмотрим, как использовать клиент Let's Encrypt для создания сертификатов и как автоматически настроить для nginx.

Как работает Let's Encrypt

Перед выдачей сертификата Let's Encrypt проверяет право собственности на ваш домен. Клиент Let's Encrypt, запущенный на вашем хосте, создает временный файл (токен) с необходимой информацией. Затем сервер проверки Let's Encrypt выполняет HTTP-запрос для получения файла и проверяет маркер, который проверяет, разрешается ли запись DNS для вашего домена на сервере, на котором запущен клиент Let's Encrypt.

Необходимые условия

Прежде чем начать работу с Let's Encrypt, вам необходимо:
  • Установить nginx
  • Владеть зарегистрированное доменное имя для сертификата
  • Создать DNS-запись, которая свяжет ваше доменное имя и общедоступный IP-адрес вашего сервера.
Теперь вы можете легко настроить Let's Encrypt для nginx.

1. Загрузите клиент Let's Encrypt

Во-первых, скачайте клиент Let's Encrypt - certbot.
apt-get update
sudo apt-get install certbot
apt-get install python3-certbot-nginx

2. Настройка nginx

certbot может автоматически настраивать nginx для SSL/TLS. Он ищет и модифицирует блок server в конфигурации nginx, который содержит директиву server_name с доменным именем, для которого вы запрашиваете сертификат. В нашем примере домен www.example.com.
  1. Предполагая, что вы начинаете с новой установки nginx, используйте текстовый редактор для создания файла в каталоге /etc/nginx/conf.d с именем domain-name.conf (в нашем примере www.example.com.conf).
  2. Укажите свое доменное имя (и варианты, если есть) с помощью директивы server_name:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}
Сохраните файл, затем выполните следующую команду, чтобы проверить синтаксис вашей конфигурации и перезапустить nginx:
$ nginx -t && nginx -s reload

3. Получите сертификат SSL/TLS

Плагин nginx для certbot позаботится о перенастройке nginx и перезагрузке его конфигурации при необходимости.
  1. Выполните следующую команду для создания сертификатов с помощью плагина nginx:
sudo certbot --nginx -d example.com -d www.example.com
  1. Отвечайте на запросы certbot о настройке параметров HTTPS, что включает в себя ввод адреса электронной почты и согласие с условиями обслуживания Let's Encrypt.
Когда генерация сертификата завершится, NGINX перезагрузится с новыми настройками. certbot генерирует сообщение о том, что создание сертификата прошло успешно, и указывает расположение сертификата на сервере.
Congratulations! You have successfully enabled https://example.com and https://www.example.com 

-------------------------------------------------------------------------------------
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 2025-12-12.
Примечание: Срок действия сертификатов Let's Encrypt истекает через 90 дней. Если вы посмотрите на domain-name.conf, то увидите, что certbot изменил его:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4. Автоматическое продление сертификатов Let's Encrypt

Срок действия сертификатов Let's Encrypt истекает через 90 дней. Мы рекомендуем вам продлевать сертификаты автоматически. Для этого мы добавляем cron в существующий файл crontab. Откройте файл crontab.
crontab -e
Добавьте команду certbot для ежедневного запуска. В этом примере мы запускаем команду каждый день в полдень. Команда проверяет, истечет ли срок действия сертификата на сервере в течение следующих 30 дней, и продлевает его, если да. Директива --quiet указывает certbot не генерировать вывод.
0 12 * * * /usr/bin/certbot renew --quiet
Сохраните и закройте файл. Все установленные сертификаты будут автоматически обновлены и перезагружены.

Итоги

Мы установили агент Let's Encrypt для создания сертификатов SSL/TLS для зарегистрированного доменного имени. Мы настроили nginx на использование сертификатов и настроили автоматическое продление сертификатов. С сертификатами Let's Encrypt для nginx вы можете создать простой и безопасный веб-сайт за считанные минуты.