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. Наслаждайтесь своим защищенным сайтом!