VestaCP — проблемы с SSL

Продолжаем серию статей о некоторых проблемах, возникающих с панелью управления веб-сервером VestaCP. Веста — очень неплохая панель и мы используем ее в некоторых своих проектах. Многие наши клиенты используют эту панель на своих серверах. Сегодня мы расскажем об одной из таких проблем — ошибка «Поле «ssl certificate, ssl key» не может быть пустым» при попытке выпуска сертификата Let`s Encrypt. А так же покажем способ решения.

С чего все начиналось

На почту клиенту (а именно его почта указана в Весте как административная) в течении какого-то времени, VestaCP присылала алерты примерно такого содержания:

unable to load certificate
140280798754704:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1199:
140280798754704:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:374:Type=X509
140280798754704:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:

В теме письма было следующее: Cron <admin@<some server>> sudo /usr/local/vesta/bin/v-update-letsencrypt-ssl — это имя крон скрипта, который обновляет сертификаты Let`s Encrypt.

Но кто же обращает внимание на алерты от панели управления, правда?

Ну и, естественно, в лучших традициях жанра — сегодня вышел срок сертификата на основном сайте Клиента, и, конечно — в самый неподходящий момент.  Конечно, тут же поступила просьба о помощи в решении данного вопроса.

Так, как сервер Клиента не стоит на «Абонентском обслуживании» и он предпочитает обращаться за разовыми услугами — нам потребовалось некоторое время на решение его вопроса.

Разбираемся с проблемой

Первое что Мы пытаемся сделать — просто выпустить новый сертификат из Веб-интерфейса, что естественно.

Получаем ошибку — «Поле «ssl certificate, ssl key» не может быть пустым» («Field «ssl certificate, ssl key» can not be blank.» если локаль English)

Открываем лог ошибок Весты командой

tail -f /var/log/vesta/error.log

и видим следующее (‘<some user>’ и ‘<some domain>’ — тут будут имя пользователя и имя домена) :

v-add-web-domain-ssl  '<some user>' '<some domain>' '/tmp/tmp.SomeCode' [Error 2]
...v-delete-web-domain-ssl  '<some user>' '<some domain>' 'no' [Error 3]
...v-delete-letsencrypt-domain  '<some user>' '<some domain>' 'no' [Error 3]
...v-delete-web-domain-ssl  '<some user>' '<some domain>' 'no' [Error 3]
...v-delete-letsencrypt-domain  '<some user>' '<some domain>' 'no' [Error 3]

Лог может показаться неинформативным, однако это не так. Мы довольно давно работаем с этой панелью и вот этот ключик ‘no’ перед номером ошибки как раз и подсказал нам о том, что проблема в конфигурации доменов для панели.

Приступаем к лечению

Открываем файл конфигурации, воспользовавшись любимым текстовым редактором (я использую nano)

nano /usr/local/vesta/data/users/<some user>/web.conf

И видим там строки с описанием конфигурации доменов (сколько доменов у пользователя — столько и строк)

DOMAIN='<some domain>' IP='XXX.XXX.XXX.XXX IP6='' ALIAS='WWW.<some domain>' TPL='wordpress2' SSL='no' SSL_HOME='same' LETSENCRYPT='yes' FTP_USER=''.....................

Нас интересуют вот эти 2 параметра SSL=’no’ и LETSENCRYPT=’yes’ — явная ошибка конфигурации. Для решения проблемы меняем LETSENCRYPT=’yes’ на LETSENCRYPT=’no’. В итоге эта строка должна стать такой:

DOMAIN='<some domain>' IP='XXX.XXX.XXX.XXX IP6='' ALIAS='WWW.<some domain>' TPL='wordpress2' SSL='no' SSL_HOME='same' LETSENCRYPT='no' FTP_USER=''.....................

Сохраняем файл, и снова пытаемся в веб-интерфейсе панели перевыпустить сертификат, и на этот раз — никаких ошибок, панель успешно получает Let`s Encrypt сертификат для домена.

Сделано в Одессе
Сайт находится в состоянии наполнения контентом, приносим свои извинения за временные неудобства.