Т.к. у меня уже более чем один домен, а для ресурсов на поддоменах я для каждого использую сертификат от Let's Encrypted, то возникает вопрос, а почему бы не настроить wildcard сертификат для всех поддоменов *.ekzorchik.ru. Так ведь удобнее и не нужно создавать для каждого. Плюс — это опыт практической настройки. Да и на работе возникла такая задача, покуда лавочку с бесплатным непрекрыли то можно пользоваться.

Шаг №1: Все дальнейшие действия на Ubuntu 18.04 Server + настройки после развертывания ОС выполнены с использованием моего небольшого скрипта:

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject
ekzorchik@srv-bionic:~$ nano /dproject/default
#!/bin/bash
# Codepage UTF-8

# aka Олло Александр aka ekzorchik (Telegram: @ekzorchik)
# for Ubuntu 18.04 Server amd64
#for wget no use proxy
sed -i 's/#use_proxy = on/use_proxy = off/g' /etc/wgetrc

rm -Rf /var/lib/apt/lists
locklist="/var/lib/apt/lists/lock"
if [ -f $locklist ]
then
	echo "$locklist found i budet delete"
	rm -rf $locklist
else
	echo "$locklist not found"
fi

lockapt="/var/cache/apt/archives/lock"
if [ -f $lockapt ]
then
	echo "$lockapt found i budet delete"
	rm -rf $lockapt
else
	echo "$lockapt not found"
fi

lock="/var/lib/dpkg/lock"
lockfrontend="/var/lib/dpkg/lock-frontend"
lockbackup="/var/lib/dpkg/lock-backup"
if [ -f "$lock" ]
then
        echo "$lock found i budet delete"
        rm -rf $lock
        ls /var/lib/dpkg/lock
else
        echo "$lock not found."
fi
if [ -f "$lockfrontend" ]
then
        echo "$lockfrontend found i budet delete"
        rm -rf $lockfrontend
        ls /var/lib/dpkg/lock-frontend
else
        echo "$lockfrontend not found"
fi
if [ -f "$lockbackup" ]
then
        echo "$lockbackup found i budet delete"
        rm -rf $lockbackup
        ls /var/lib/dpkg/lock-backup
else
        echo "$lockbackup not found"
fi


apt-get update && sudo apt-get upgrade -y
rm -rf /var/lib/dpkg/updates/*

sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades
dpkg --configure -a

#Timezone
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
apt-get autoremove -y
# Удаляю из системы пакет Cloud Init
sudo bash -c "echo 'datasource_list: [ None ]' sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg"
sudo apt purge -y cloud-init
sudo rm -Rf /etc/cloud /var/lib/cloud

#NTP
sudo apt-get install ntpdate mercurial bikeshed -y
sudo bash -c "echo '@reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null'" | sudo -s tee /var/spool/cron/crontabs/root
ntpdate -s 0.pool.ntp.org

#Install nuznoe in work
apt-get install htop mc software-properties-common -y

purge-old-kernels --keep 1 -y


#locale
#sudo locale-gen ru_RU
#sudo locale-gen ru_RU.UTF-8
sudo locale-gen en_US.UTF-8
sudo sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen && sudo locale-gen
#sudo sed -i 's/ru_RU.KOI8-R/ru_RU.UTF-8/g' /etc/locale.alias
echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale
echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale
echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale
ekzorchik@srv-bionic:~$ sudo ./dproject/default

Шаг №2: Скачиваю утилиту certbot-auto

ekzorchik@srv-bionic:~$ sudo wget https://dl.eff.org/certbot-auto -O /usr/sbin/certbot-auto
ekzorchik@srv-bionic:~$ file /usr/sbin/certbot-auto
/usr/sbin/certbot-auto: POSIX shell script, UTF-8 Unicode text executable
ekzorchik@srv-bionic:~$ sudo chmod a+x /usr/sbin/certbot-auto

Шаг №3: Перехожу к созданию Wildcard сертификата сроком на 90 дней:

ekzorchik@srv-bionic:~$ sudo certbot-auto certonly --manual --preferred-challenges=dns --email support@ekzorchik.ru --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.ekzorchik.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for ekzorchik.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: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.ekzorchik.ru with the following value:
TrHU9bq-AvddValKw_q8OepzFVH5ql4QFk7YRq2BAPY
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

добавляю TXT запись на своем регистраторе где я зарегистрировал собственное DNS имя ekzorchik.ru

Создаю TXT запись для Lets Encrypted

и нажимаю «Добавить»

Созданная запись

На заметку: Перед тем как нажимать клавишу "Enter" следует подождать минут 20
И нажав после клавишу "Enter" получаю созданный Wildcard сертификат для всех моих поддоменов сроком на 90 дней:

Press Enter to Continue
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ekzorchik.ru-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ekzorchik.ru-0001/privkey.pem
Your cert will expire on 2020-09-29. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto 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
ekzorchik@srv-bionic:~$

После на регистраторе DNS записей созданную запись TXT можно оставить, а можно и удалить, т.к. проверку подлинности я уже произвел.

Шаг №4: Теперь остается только в настройках конфигурационных файлов nginx моих ресурсов поправить путь до созданного сертификата:

ekzorchik@srv-bionic:~$ sudo nano /etc/nginx/sites-available/lin.ekzorchik.ru 
server {
    if ($host = lin.ekzorchik.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    if ($host = lin.ekzorchik.ru) {
	return 301 https://$host$request_uri;
    }
  listen 80;
  server_name lin.ekzorchik.ru;
  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl;
  server_name lin.ekzorchik.ru;
    ssl_certificate /etc/letsencrypt/live/ekzorchik.ru-0001/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ekzorchik.ru-0001/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  root /var/www/html/lin.ekzorchik.ru;
  index index.php;
  access_log /var/log/wordpress/access.log;
  error_log /var/log/wordpress/error.log;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
  gzip on; #
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
  location ~ /\. {
        deny all;
    }
  location ~ /.well-known {
	allow all;
    }
  location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }
   location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
        access_log off;
        log_not_found off;
        expires max;
    }
  }
}
ekzorchik@srv-bionic:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-bionic:~$
ekzorchik@srv-bionic:~$ sudo systemctl restart nginx php7.2-fpm

Шаг №5: Проверяю, а какая информация теперь по сертификату для ресурса https://lin.ekzorchik.ru выводится это если смотреть через браузер

Проверяю, а какая информация теперь по сертификату для ресурса https://lin.ekzorchik.ru выводится это если смотреть через браузер

Шаг №6: Вот только уже автоматического продления сертификата не получится делать, т.к. я выбрал режим manual (ручной), а придется через каждые 90 дней заново запускать утилиту и создавать TXT запись — увы мне это не подходит или можно посмотреть что с одним моим ресурсом (https://lin.ekzorchik.ru) через 90 дней будет. Автоматически или неавтоматически сертифит обновится. Запись в crontab я оставляю как и была сделана мною:

ekzorchik@srv-bionic:~$ sudo crontab -e
0 2 * * * sudo /usr/sbin/certbot-auto -q renew

Шаг №7: Кстати этот режим manual я использую, когда продлеваю сертификаты для порталов bitrix, Exchange, Remote Desktop Gateway ,где действия на этот счет оформлены в виде пошаговых заметок:

Шаг №8: Посмотреть сколько времени сертификаты еще действуют можно, либо задействую заметку "Мониторим дату окончания домена и сертификата https через Zabbix Server 4.4" /  или же просто запустив команду:

ekzorchik@srv-bionic:~$ sudo certbot-auto certificates

там где у Вас установлена утилита certbot-auto.

Итого я снова повысил свой уровень знаний создав пошаговую заметку. На этом пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.