Wildcard SSL сертификат


Wildcard SSL сертификат подходит для доменного имени и всех поддоменов. Одни и те же файлы сертификата, цепочки доверия и приватного ключа могут быть прописаны в виртуальных хостах неограниченного количества сайтов на разных машинах.



Как выпустить Wildcard SSL сертификат Let's Encrypt на сервере с Ubuntu


Wildcard SSL сертификат от Let's Encrypt можно выпустить установив на сервере стандартный клиент Certbot.



В примере не используются плагины Apache и nginx. Сертификаты генерируются и сохраняются на диске в виде файлов также как приватный ключ SSL.



Убедимся в том, что запущен веб-сервер — имя веб-сервера ожидаем увидеть в выводе

netstat -nltp | grep 443



В большинстве случаев будет Nginx или Apache.

Если на сервере ещё нет ни одного сертификата нужно проверять порт 80:

netstat -nltp | grep 80



Пример вывода на скриншоте:

Wildcard SSL сертификат


Обновляем список репозиториев

apt-get update



Устанавливаем пакет add-apt-repository, который нужен для добавления репозиториев ppa из командной строки

apt-get install software-properties-common



Теперь можно добавить репозиторий

add-apt-repository ppa:certbot/certbot

This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot

ENTER



Снова обновляем информацию

apt-get update



И устанавливаем клиент

apt install certbot



Теперь можно переходить к выпуску сертификата, указываем домен со звездочкой, она будет означать все поддомены. Метод выпуска сертификатов certonly. Ключ означает что автоматически сертификаты устанавливаться на сервер не будут. Появятся файлы, их вручную нужно будет подключить.


certbot certonly --manual -d *.example.com --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory


Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]



Далее certbot запросит согласие присылать письма с новостями, можно ответить Yes. Слишком часто подобные сообщения не приходят.



Поскольку в строке запроса указан метод валидации — DNS будет предложено добавить для домена DNS запись типа TXT.



Пример сообщения Let's Encrypt про TXT запись для подтверждения владения доменом:


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

spl5wSHiFuHXMyKR65qaWQLREmRv_KKSuwaV4bxleTs




Добавление и проверка DNS записи

Запись добавляется в личном кабинете компании, предоставляющей хостинг DNS для домена.



Подтвердить, что запись добавлена нужно в консоли сервера нажав ENTER. Предварительно стоит убедиться в том, что отдается верное значение при помощи dig.

dig _acme-challenge.example.com txt +short

Запись должна быть в выводе:

"spl5wSHiFuHXMyKR65qaWQLREmRv_KKSuwaV4bxleTs"



Если ошибок не произошло сертификат будет выпущен:

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 2018-12-14. 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'



Установка и продление wildcard сертификата


В последней строке можно увидеть, что продлевается сертификат при выполнении certbot renew



Можно проверить завершится продления успешно ли процесс успешно без фактического выполнения процесса добавив ключ dry-run:

certbot renew --dry-run



При настройке автопродления команда без ключа добавляется в системный планировщик задач CRON. Пример можно увидеть в этом материале.

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



Про установку SSL сертификата на Apache и на Nginx.



Возможные ошибки letsencrypt


В случае возникновения ошибок letsencrypt можно посмотреть информацию в логе

tail /var/log/letsencrypt/letsencrypt.log



Иногда обращения к серверам letsencrypt.org завершаются закрытием соединения со стороны последних, поэтому команду может потребоваться выполнить дважды.

По этой же причине продление (по CRON) лучше выполнять не раз в три месяца, а минимум 4-6 раз.

Сказать спасибо