Системное администрирование

VestaCP и Let’s Encrypt для национальных IDN доменов

При попытке выпуска сертификата Let’s Encrypt в VestaCP для национального (кириллического) домена возникает ошибка, что этого домена нет:
root@server:~# v-add-letsencrypt-domain admin xn--e1aybc.xn--p1ai
Error: web domain тест.рф doesn't exist
root@server:~#
В логе /usr/local/vesta/log/letsencrypt.log можно увидеть, что ошибка возникает при установке выпущенного сертификата, файлы которого сохраняются во временную директорию:
[Sun Dec 26 13:57:24 MSK 2021] : status=200
[Sun Dec 26 13:57:24 MSK 2021] : v-add-web-domain-ssl admin xn--e1aybc.xn--p1ai /tmp/tmp.65tZ2aV0ek same
same
[Sun Dec 26 13:57:24 MSK 2021] : v-add-web-domain-ssl status: 3
[Sun Dec 26 13:57:24 MSK 2021] : EXIT=xn--e1aybc.xn--p1ai certificate installation failed
Стрейс процесса добавления сертификата к сайту немного проясняет ситуацию:
root@server:~# strace -f -s 1000 v-add-web-domain-ssl admin xn--e1aybc.xn--p1ai /tmp/tmp.65tZ2aV0ek same
...
[pid 18845] execve("/bin/grep", ["grep", "DOMAIN='тест.рф'", "/usr/local/vesta/data/users/admin/web.conf"], 0x556f00d910b0 /* 18 vars */) = 0
По нему видно, что скрипты панели ищут в конфиге /usr/local/vesta/data/users/admin/web.conf домен в кириллице, хотя там он добавлен в punycode формате. Для решения проблемы нужно в скрипте /usr/local/vesta/bin/v-add-web-domain-ssl поменять строку:
domain=$(idn -t --quiet -u "$domain" )
на строку:
domain=$(idn -t --quiet -a "$domain" )
Панели управления