Создание сертификатов Let’s Encrypt Wildcard в NGINX

Let’s Encrypt — это бесплатный, автоматизированный и открытый центр сертификации (ЦС), который предоставляет SSL/TLS-сертификаты для включения HTTPS на вашем сайте. Сертификаты Let’s Encrypt wildcard позволяют защитить неограниченное количество поддоменов в рамках базового домена (например, *.example.com).

В этом руководстве мы покажем вам, как использовать Certbot для генерации сертификатов Let’s Encrypt wildcard и настройки HTTPS на веб-сервере Nginx.

Предварительные условия

Прежде чем следовать этому руководству, вам понадобятся:

  • Сервер под управлением Ubuntu 20.04 с публичным IPv4-адресом и обычный пользователь, не являющийся пользователем root, с привилегиями sudo.
  • Доменные имена, указывающие на публичный IP вашего сервера. В наших примерах мы будем использовать example.com и *.example.com.
  • Порты 80 и 443 открыты на брандмауэре вашего сервера.
  • На вашем сервере установлен Nginx. Если у вас его еще нет, вы можете установить его с помощью:
$ sudo apt install nginx
  • Certbot установлен на вашем сервере. Если он еще не установлен, вы можете установить его с помощью:
$ sudo apt install certbot python3-certbot-nginx

После того как вы выполнили все необходимые условия, перейдем к генерации сертификатов подстановочных знаков.

Шаг 1 — Генерация сертификатов диких символов

Certbot включает в себя certonly команду для получения сертификатов SSL/TLS. Чтобы сгенерировать сертификат с подстановочным знаком для *.example.com, выполните команду:

$ sudo certbot certonly --manual --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.example.com

Это указывает Certbot на то, что:

  • Использовать «ручной» плагин для получения сертификатов
  • Используйте вызов «dns» для подтверждения владения доменом
  • Используйте конечную точку API ACME v2 от Let’s Encrypt
  • Согласитесь с условиями предоставления услуг Let’s Encrypt
  • Получите сертификат для *.example.com

Вам будет предложено ввести адрес электронной почты для уведомлений об истечении срока действия сертификата. Введите адрес электронной почты и нажмите Enter.

Далее Certbot предоставит TXT-записи, которые необходимо создать в DNS вашего домена, чтобы подтвердить контроль над доменом. Создайте эти TXT-записи в панели управления DNS, а затем нажмите Enter, чтобы продолжить.

Certbot подождет, пока изменения в DNS распространятся по всему миру, и проверит TXT-записи. В случае успеха сертификат с подстановочным знаком (fullchain.pem) и закрытый ключ (privkey.pem) будут сохранены под /etc/letsencrypt/live/example.com/.

Шаг 2 — Настройка Nginx

Сгенерировав сертификат wildcard, мы можем настроить Nginx.

Сначала создайте новый серверный блок Nginx для главного сервера example.com домена:

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

Добавьте следующую конфигурацию:

server {
        listen80;
        listen [::]:80;
        server_name example.com;
        return301 https://$host$request_uri;
}
server {
       listen443 ssl http2;
       listen [::]:443 ssl http2;
       server_name example.com;
       ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
       # Other SSL config
       ...
}

Это настраивает HTTPS с использованием сертификата Let’s Encrypt и перенаправляет HTTP-трафик на HTTPS.

Далее создайте серверный блок для поддомена с диким знаком *.example.com:

$ sudo nano /etc/nginx/sites-available/wildcard.example.com
server {
  listen80;
  listen [::]:80;
  server_name*.example.com;
  return301 https://$host$request_uri;  
}
server {
  listen443 ssl http2;
  listen [::]:443 ssl http2;
	
  server_name*.example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  # Other SSL config
  ...
}

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

Активируйте блоки сервера:

$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
$ sudo ln -s /etc/nginx/sites-available/wildcard.example.com /etc/nginx/sites-enabled/

Наконец, проверьте конфигурацию Nginx и перезагрузите ее в случае успеха:

$ sudo nginx -t
$ sudo systemctl reload nginx

Теперь ваш сертификат wildcard должен работать! Попробуйте получить доступ к вашему сайту по HTTPS и различным поддоменам, чтобы убедиться в этом.

Автоматизация продления

Срок действия сертификатов Let’s Encrypt истекает через 90 дней, поэтому вам придется регулярно их обновлять.

Вы можете автоматизировать обновление с помощью программы Certbot renew команду. Создайте задание cron для ежедневного выполнения:

$ sudo crontab -e

Добавьте эту строку, которая будет запускать Certbot ежедневно и обновлять сертификаты, если срок их действия истекает менее чем через 30 дней:

0 0 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Это автоматически обновит ваши сертификаты до истечения срока их действия!

Заключение

Вот и все! Теперь у вас должны быть установлены сертификаты Let’s Encrypt wildcard, выпущенные Certbot для вашего домена. Это позволит вам включить HTTPS на вашем основном домене и всех поддоменах с помощью одного сертификата.

Сертификаты будут обновляться автоматически, обеспечивая постоянную защиту HTTPS для вашего сайта. Это обеспечит вашим посетителям безопасность, доверие и SEO-преимущества.

Поскольку Let’s Encrypt выдает доверенные сертификаты бесплатно, нет причин не использовать HTTPS повсеместно с сертификатами wildcard. Наслаждайтесь своим защищенным сайтом!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *