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