Как побороть ошибку 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х месяцев тоже проходило без проблем, сейчас боюсь надо будет глобально чистить кириллицу. :(
Есть какие-то варианты, как с этим быть?
Спасибо.
Удалил все сертификаты, удалил все настройки certbot-auto и certbot.
Установил certbot заного, теперь все работает нормально, на русские буквы не жалуется, и что интересно ничего теперь дописывать не нужно и никакие служебные папки не создаются. В общим, все как раньше, только теперь запускаю certbot и все.
Спасибо chupasaurus, что подсказал, что certbot-auto это лишь скрипт обновления certbot, т.е. его я больше ставить не буду, для обновления вполне достаточно:
apt update
apt upgrade
пока тему прикрываю, вопросов как бы сейчас нет, но не знаю появится ли эта проблема еще или нет
странно конечно это все
Добавьте в /etc/letsencrypt/cli.ini строку webroot-path = /some/path, в следствие чего будет автоматически использоваться плагин webroot, через который работает "авто"настройка nginx/apache.
Дайте на эту директорию права на чтение nginx и соответственно в конфигах nginx добавляете на каждом домене
Мне кажется я вопрос задал про certbot-auto, а не про certbot. Ранее я использовал certbot, но как раз из-за подобного мусора в виде .well-known я от нее отказался, могу на нее вернуть, с ней у меня нет проблем. Но еще раз повторю, что вопрос я задал совсем о другой программе.
A self-updating wrapper script for the Certbot ACME client. When run, updates
to both this script and certbot will be downloaded and installed. After
ensuring you have the latest versions installed, certbot will be invoked with
all arguments you have provided.
root@Web:~$certbot-auto --help
-------------------------------------------------------------------------------
certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
Certbot can obtain and install HTTPS/TLS/SSL certificates. By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:
obtain, install, and renew certificates:
(default) run Obtain & install a certificate in your current webserver
certonly Obtain or renew a certificate, but do not install it
renew Renew all previously obtained certificates that are near
expiry
-d DOMAINS Comma-separated list of domains to obtain a certificate for
--apache Use the Apache plugin for authentication & installation
--standalone Run a standalone webserver for authentication
--nginx Use the Nginx plugin for authentication & installation
--webroot Place files in a server's webroot folder for authentication
--manual Obtain certificates interactively, or using shell script
hooks
-n Run non-interactively
--test-cert Obtain a test certificate from a staging server
--dry-run Test "renew" or "certonly" without saving any certificates
to disk
manage certificates:
certificates Display information about certificates you have from Certbot
revoke Revoke a certificate (supply --cert-path)
delete Delete a certificate
manage your account with Let's Encrypt:
register Create a Let's Encrypt ACME account
--agree-tos Agree to the ACME server's Subscriber Agreement
-m EMAIL Email address for important account notifications
More detailed help:
-h, --help [TOPIC] print this message, or detailed help on a topic;
the available TOPICS are:
all, automation, commands, paths, security, testing, or any of the
subcommands or plugins (certonly, renew, install, register, nginx,
apache, standalone, webroot, etc.)
-------------------------------------------------------------------------------
Так, давайте по порядку:
1. Ссылку на репозиторий я не вижу.
2. Зачем мне нужна ссылка на репозиторий, чтобы перейти на питон 3 или зачем?
3. "Зачем у вас вместо certbot-auto скрипт certbot" - эту фразу я вообще не понимаю, может быть Вы имели ввиду наоборот, зачем я пользуюсь certbot-auto, когда есть certbot?
4. Все, что Вы написали в первом сообщение относится к certbot, вопрос был про certbot-auto. И даже не про него, а почему при запуске обновленный питон жалуется, что не понимает ascii коды выше 128. Хотя до этого полгода, все работало нормально.
Еще решил добавить откуда у меня certbot-auto:
mkdir -p /usr/local/certbot/bin
wget https://dl.eff.org/certbot-auto -O /usr/local/certbot/bin/certbot-auto
chmod a+x /usr/local/certbot/bin/certbot-auto
ln -s /usr/local/certbot/bin/certbot-auto /bin/certbot-auto
Хорошо, признаю, что проект один, и что certbot-auto это надстройка для удобства на bash.
Согласен, что пайтон использует именно certbot. По этой теме у меня вопросов ноль.
После "Анатолий" написано "certbot-auto --help введите". Т.е. репозитория я тут не вижу!
для backports у меня прописано так:
deb ftp.debian.org/debian stretch-backports main
установлено это так:
apt install python-certbot-nginx -t stretch-backports
Ну и вновь возвращаемся к моему вопросу, почему ранее используя bash-скрипт certbot-auto у меня все работало нормально, а сейчас проблема с Python?
Я еще раз повторяю, что работать через certbot-auto для меня удобнее, не нужно ничего писать в конфигах, и не создаются служебные директории для проверки сертификата.
Пока я только слышу от Вас посыл забыть про certbot-auto и перейти на certbot. Возможно я не сильно одаренный, прошу объяснить мне это на пальцах, но мне кажется мы говорим о разных вещах.
Проблема появляется и сейчас, она никуда не делась.
Питон вижу впервые, ранее никогда с ним не сталкивался. Насколько я понял, фича в том, что certbot написан на втором питоне, у которого родная кодировка в ascii, а данные мы ему пихаем (точнее не мы, а сертбот) в utf8.
Не знаю насколько решение расово верно, но оно работает. /bin/@certbot
# после строки
import sys
#вставить строки
reload(sys)
sys.setdefaultencoding('utf8')
После этого серт устанавливается, ошибки больше нет.