Как побороть ошибку Python (ascii' codec can't decode) при создании сертификата Let's Encrypt?

Debian 9, Nginx, certbot-auto.
Сегодня пытался создать сертификат Let's Encrypt, для нового домена, но после запуска, certbot-auto обновил версию Python, сейчас установлена - python/stable,now 2.7.13-2 amd64, какая была ранее к сожалению не запомнил.
Так вот, после указании домена, для которого нужно получить сертификат, у меня вываливается ошибка:
An unexpected error occurred:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 2: ordinal not in range(128)
Please see the logfiles in /var/log/letsencrypt for more details.


Проблема с кодировкой. Если я удаляю кириллицу из конфига nginx, то домен получает сертификат.
У меня в конфигах много комментариев на русском и я не хотел бы их удалять, я понимаю, что возможно мне нужно знать английский и комментировать все на английском, но все же, почему ранее все работало, а сейчас нет?
Новые домены я добавляю по шаблону, так что на всех доменах одно и тоже. Обновление сертификатов после 3х месяцев тоже проходило без проблем, сейчас боюсь надо будет глобально чистить кириллицу. :(
Есть какие-то варианты, как с этим быть?
Спасибо.
  • Вопрос задан
  • 3285 просмотров
Решения вопроса 1
Tolly
@Tolly Автор вопроса
Удалил все сертификаты, удалил все настройки certbot-auto и certbot.
Установил certbot заного, теперь все работает нормально, на русские буквы не жалуется, и что интересно ничего теперь дописывать не нужно и никакие служебные папки не создаются. В общим, все как раньше, только теперь запускаю certbot и все.
Спасибо chupasaurus, что подсказал, что certbot-auto это лишь скрипт обновления certbot, т.е. его я больше ставить не буду, для обновления вполне достаточно:
apt update
apt upgrade

пока тему прикрываю, вопросов как бы сейчас нет, но не знаю появится ли эта проблема еще или нет
странно конечно это все
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
  1. Добавьте в /etc/letsencrypt/cli.ini строку webroot-path = /some/path, в следствие чего будет автоматически использоваться плагин webroot, через который работает "авто"настройка nginx/apache.
  2. Дайте на эту директорию права на чтение nginx и соответственно в конфигах nginx добавляете на каждом домене
    location ^~ /.well-known/acme-challenge/ {
      root /some/path;
    }
    Я предпочитаю прописать путь к токенам в переменную в nginx.conf для консистентности конфигов сайтов.
  3. Если уже есть сертификаты от LE, то придётся править конфиги их получения (лежат в /etc/letsencrypt/renewal/, ) или пересоздавать.

Дальше будут работать стандартные certbot certonly -d new.domain.tld и certbot renew
Ответ написан
gluck59
@gluck59
Виртуальный глюк
Проблема появляется и сейчас, она никуда не делась.

Питон вижу впервые, ранее никогда с ним не сталкивался. Насколько я понял, фича в том, что certbot написан на втором питоне, у которого родная кодировка в ascii, а данные мы ему пихаем (точнее не мы, а сертбот) в utf8.

Не знаю насколько решение расово верно, но оно работает.
/bin/@certbot

# после строки
import sys  
#вставить строки
reload(sys)  
sys.setdefaultencoding('utf8')


После этого серт устанавливается, ошибки больше нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы