Т.к. у меня уже более чем один домен, а для ресурсов на поддоменах я для каждого использую сертификат от 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
и нажимаю «Добавить»
На заметку: Перед тем как нажимать клавишу "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
выводится это если смотреть через браузер
Шаг №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
,где действия на этот счет оформлены в виде пошаговых заметок:
Как обновить сертификат Let’s Encrypt через DNS
Нужно обновить сертификат для Remote Desktop Gateway
Шаг №8:
Посмотреть сколько времени сертификаты еще действуют можно, либо задействую заметку "Мониторим дату окончания домена и сертификата https через Zabbix Server 4.4"
/ или же просто запустив команду:
ekzorchik@srv-bionic:~$ sudo certbot-auto certificates
там где у Вас установлена утилита certbot-auto.
Итого я снова повысил свой уровень знаний создав пошаговую заметку. На этом пока собственно все, с уважением автор блога Олло Александр aka ekzorchik.