let-encrypt-wildcard-ssl

Сегодня в статье научимся получать сертификат WildCard от Let’s Encrypt для доменов третьего уровня.

Получать сертификат я буду для своего сайта работающего на Nginx + PHP-FPM.

Для начала нам необходимо установить утилиту CertBot. Для этого в терминале набираем следующее.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

Данными командами мы добавили репозиторий для certbot, обновили все репозитории и установили certbot для Nginx.

Если у вас еще не установлен WEB-сервер Nginx, то читаем статью как это сделать.

Получаем WildCard от Let’s Encrypt

Давайте наконец-то получим наш сертификат для поддоменов. но для начала в тестовом режиме. В терминале набираем:

sudo certbot --dry-run --manual --agree-tos --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory -d *.obu4alka.ru -d obu4alka.ru

На что certbot выдаст вот такую запись:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):

Ну тут все просто, необходимо ввести наш email для получения уведомлений о безопасности и оповещения о продлении. Двигаемся далее

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Тут нам сообщают чтобы мы поделились нашим адресом с разработчиками и всякими некоммерческими организациями. Я конечно отвечаю нет “N

Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for obu4alka.ru

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

В данном сообщении нас предупреждают о том, что наш IP адрес на котором расположен наш сайт будет записан у разработчиков. Нажимаем “Y

Please deploy a DNS TXT record under the name
_acme-challenge.obu4alka.ru with the following value:

3yTQ7zcagxbrWLdLI4Jp8wA_VarDKkAt7RqCOwjugaE

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Certbot выдал нам запись, которую необходимо внести в txt запись DNS сервера. Как это сделать …. ну у каждого по разному. Вот пару фотографий как это происходило у меня.

Захожу в панель хостера — выбираю мой домен — управление доменом — Управление зоной ДНС

Добавляю информацию о TXT записи (это что выдал мне certbot).

За одно добавляю информацию о поддомене третьего уровня:

После внесения всех изменений в ваш домен необходимо будет немного подождать. Чтобы записи обновились у регистратора.

Если все прошло удачно, то вводим следующие команды для получения wildcard сертификата:

sudo certbot --manual --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory -d *.obu4alka.ru -d obu4alka.ru

Проходим все этапы заново и получаем наш сертификат.

Также давайте проверим что запись действительно обновилась. Для этого в терминале набираем следующую команду:

dig -t txt _acme-challenge.obu4alka.ru

или можно проверить например google DNS-ом:

dig @8.8.8.8 -t txt _acme-challenge.obu4alka.ru

Если запись обновилась, то двигаемся дальше. Так, как бот запрашивал нажатия “ENTER” после всех манипуляций, то жмем.

Waiting for verification...
Cleaning up challenges
Obtaining a new certificate
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/obu4alka.ru-0001/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/obu4alka.ru-0001/privkey.pem
   Your cert will expire on 2020-07-10. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

Ну вот WildCard сертификат был получен.

Теперь необходимо внести изменения в конфигурационный файл nginx. Для этого открываем его (у вас название и пути могут отличаться):

sudo nano /etc/nginx/site-available/obu4alka-ssl.conf

Меняем директории для записей с ssl сертификатами, а также опцию server_name.

server_name obu4alka.ru *.obu4alka.ru;

...

ssl_certificate /etc/letsencrypt/live/obu4alka.ru-0001/fullchain.pem;                                                                             
ssl_trusted_certificate /etc/letsencrypt/live/obu4alka.ru-0001/fullchain.pem;                                                                     
ssl_certificate_key /etc/letsencrypt/live/obu4alka.ru-0001/privkey.pem;

Проверяем все ли в порядке с настройкой nginx:

nginx -t

Если все в порядке, то перезагружаем nginx:

sudo /etc/init.d/nginx restart

Теперь Nginx настроен на обработку поддоменов третьего уровня с WildCard сертификатом.

Ошибка при обновлении сертификата wildcard от Let`s Encrypt

При обновлении wildcard сертификата certbot категарически не хотел обновлять данные сертификаты. Терминал выдал мне следующее:

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/obu4alka.ru-0001/fullchain.pem (failure)
  /etc/letsencrypt/live/obu4alka.ru-0002/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 renew failure(s), 0 parse failure(s)

Решение было найдено после 4 часов изучение интернета. Опишу все процедуры к которым я прибегал. Может кому помогут.

  • Первое: В директории /etc/letsencrypt/renewal находим наш домен и меняем строчку authenticator.
sudo nano /etc/letsencrypt/renewal/obu4alka.ru-0001.conf
#authenticator = manual # было
authenticator = nginx # стало
  • Второе: В директории /etc/nginx/site-available находим наш конфигурационный файл от домена и смотрим чтобы был прописан IP-адрес перед портами 80 и 443
  • Третье: После долгих мучений (первые два варианта не помогли) я решил удалить конфиги и директории на сертификаты от certbot. И так переходим в директорию /etc/letsencrypt/live и удаляем все каталоги нашего домена. Также поступаем с директорией /etc/letsencrypt/archive и /etc/letsencrypt/renewal. А далее переходим к созданию сертификата заново.

Настройка автопродления сертификатов

Тут всё просто, точнее даже очень просто.

Создаем исполняемый bash скрипт и открываем на редактирование:

sudo touch /etc/cron.weekly/cert-nginx && sudo chmod +x /etc/cron.weekly/cert-nginx && sudo nano /etc/cron.weekly/cert-nginx

Следующего содержания:

#!/bin/bash
/usr/bin/certbot renew --post-hook "service nginx reload"

В результате каждую неделю скрипт будет запускаться и проверять необходимость обновления сертификатов. В случае такой необходимости сертификаты автоматически будут обновлены и будет запущен хук обновляющий конфигурацию сервера nginx (в моём случае)

[endtxt]

RSS

Добавление RSS-ленты на главную страницу этого сайта не поддерживается, так как это может привести к зацикливанию, замедляющему работу вашего сайта. Попробуйте использовать другой блок, например блок Последние записи, для отображения записей сайта.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 2 голоса
Рейтинг статьи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять