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
Пример вывода на скриншоте:
Обновляем список репозиториев
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 раз.