Certbot: impossible d'exécuter certbot --nginx - UnicodeDecodeError: 'ascii'

Créé le 12 nov. 2017  ·  14Commentaires  ·  Source: certbot/certbot

Mon système d'exploitation est (inclure la version):

ArchLinux (noyau 4.13.11-1)

J'ai installé Certbot avec (certbot-auto, gestionnaire de packages OS, pip, etc.):

pacman -S cerbot-nginx

J'ai exécuté cette commande et elle a produit cette sortie:

cerbot --nginx

Le comportement de Certbot différait de ce à quoi je m'attendais car:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
An unexpected error occurred:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 330: ordinal not in range(128)
Please see the logfiles in /var/log/letsencrypt for more details.

Voici un journal Certbot montrant le problème (si disponible):

2017-11-12 15:15:18,497:DEBUG:certbot.main:certbot version: 0.19.0
2017-11-12 15:15:18,499:DEBUG:certbot.main:Arguments: ['--nginx']
2017-11-12 15:15:18,500:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2017-11-12 15:15:18,529:DEBUG:certbot.log:Root logging level set at 20
2017-11-12 15:15:18,531:INFO:certbot.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2017-11-12 15:15:18,532:DEBUG:certbot.plugins.selection:Requested authenticator nginx and installer nginx
2017-11-12 15:15:18,557:DEBUG:certbot.log:Exiting abnormally:
Traceback (most recent call last):
  File "/usr/bin/certbot", line 11, in <module>
    load_entry_point('certbot==0.19.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python3.6/site-packages/certbot/main.py", line 861, in main
    return config.func(config, plugins)
  File "/usr/lib/python3.6/site-packages/certbot/main.py", line 685, in run
    installer, authenticator = plug_sel.choose_configurator_plugins(config, plugins, "run")
  File "/usr/lib/python3.6/site-packages/certbot/plugins/selection.py", line 189, in choose_configurator_plugins
    authenticator = installer = pick_configurator(config, req_inst, plugins)
  File "/usr/lib/python3.6/site-packages/certbot/plugins/selection.py", line 25, in pick_configurator
    (interfaces.IAuthenticator, interfaces.IInstaller))
  File "/usr/lib/python3.6/site-packages/certbot/plugins/selection.py", line 77, in pick_plugin
    verified.prepare()
  File "/usr/lib/python3.6/site-packages/certbot/plugins/disco.py", line 248, in prepare
    return [plugin_ep.prepare() for plugin_ep in six.itervalues(self._plugins)]
  File "/usr/lib/python3.6/site-packages/certbot/plugins/disco.py", line 248, in <listcomp>
    return [plugin_ep.prepare() for plugin_ep in six.itervalues(self._plugins)]
  File "/usr/lib/python3.6/site-packages/certbot/plugins/disco.py", line 130, in prepare
    self._initialized.prepare()
  File "/usr/lib/python3.6/site-packages/certbot_nginx/configurator.py", line 156, in prepare
    self.parser = parser.NginxParser(self.conf('server-root'))
  File "/usr/lib/python3.6/site-packages/certbot_nginx/parser.py", line 35, in __init__
    self.load()
  File "/usr/lib/python3.6/site-packages/certbot_nginx/parser.py", line 42, in load
    self._parse_recursively(self.config_root)
  File "/usr/lib/python3.6/site-packages/certbot_nginx/parser.py", line 53, in _parse_recursively
    trees = self._parse_files(filepath)
  File "/usr/lib/python3.6/site-packages/certbot_nginx/parser.py", line 203, in _parse_files
    parsed = nginxparser.load(_file)
  File "/usr/lib/python3.6/site-packages/certbot_nginx/nginxparser.py", line 122, in load
    return loads(_file.read())
  File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 330: ordinal not in range(128)
2017-11-12 15:15:18,560:ERROR:certbot.log:An unexpected error occurred:

Voici le bloc de serveur nginx ou l'hôte virtuel Apache approprié pour le domaine que je configure:

user http;
worker_processes auto;
worker_cpu_affinity auto;
pcre_jit on;

events {
    worker_connections 2048;
}


http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    tcp_nopush on;
    aio threads;
    server_tokens off; # Security: Disables nginx version in error messages and in the “Server” response header field.
    charset utf-8; # Force usage of UTF-8
    index index.php index.html index.htm;
    server {
      listen 80;
      listen [::]:80;
      server_name domain.tld;
      root /usr/share/nginx/html;
      location / {
        index index.htm index.html;
      }

      # ACME challenge
      location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/lib/letsencrypt;
      }
    }
}
encodintype error nginx bug

Commentaire le plus utile

Après avoir lu un commentaire sur un autre fil de discussion par l'utilisateur @egberts , j'ai exécuté la commande suivante:

grep -r -P '[^\x00-\x7f]' /etc/apache2 /etc/letsencrypt /etc/nginx

Cette commande a trouvé le caractère incriminé "´" dans un fichier .conf du commentaire. Après l'avoir supprimé (vous pouvez modifier les commentaires comme vous le souhaitez) et recharger nginx, tout a fonctionné à nouveau.

Tous les 14 commentaires

Nous allons examiner cela, car c'est certainement quelque chose que nous devrions gérer, mais pour contourner ce problème, remplacez les guillemets dans le commentaire de la directive server_tokens : “Server”

@joohoi

2018-05-05 12: 28: 44,181: DEBUG: certbot.main : certbot version: 0.22.2
2018-05-05 12: 28: 44.181: DEBUG: certbot.main : Arguments: ['--nginx']
2018-05-05 12: 28: 44,181: DEBUG: certbot.main : Plugins découverts: PluginsRegistry (PluginEntryPoint # manual, PluginEntryPoint # nginx, PluginEntryPoint # null, PluginEntryPoint # standalone, PluginEntryPoint # webroot)
2018-05-05 12: 28: 44,193: DEBUG: certbot.log : Niveau de journalisation racine défini à 20
2018-05-05 12: 28: 44,193: INFO: certbot.log : enregistrement du journal de débogage dans /var/log/letsencrypt/letsencrypt.log
2018-05-05 12: 28: 44,194: DEBUG: certbot.plugins.selection : authentificateur demandé nginx et installateur nginx
2018-05-05 12: 28: 44,343: DEBUG: certbot.log : Sortie anormale:
Traceback (dernier appel le plus récent):
Fichier "/ usr / bin / certbot", ligne 11, dans
load_entry_point ('certbot == 0.22.2', 'console_scripts', 'certbot') ()
Fichier "/usr/lib/python3/dist-packages/certbot/main.py", ligne 1266, en main
retourne config.func (config, plugins)
Fichier "/usr/lib/python3/dist-packages/certbot/main.py", ligne 1018, en cours d'exécution
installateur, authentificateur = plug_sel.choose_configurator_plugins (config, plugins, "run")
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", ligne 189, dans choose_configurator_plugins
authentificateur = installer = pick_configurator (config, req_inst, plugins)
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", ligne 25, dans pick_configurator
(interfaces.IAuthenticator, interfaces.IInstaller))
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", ligne 77, dans pick_plugin
vérifié.prepare ()
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", ligne 245, en préparation
renvoie [plugin_ep.prepare () pour plugin_ep dans six.itervalues ​​(self._plugins)]
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", ligne 245, dans
renvoie [plugin_ep.prepare () pour plugin_ep dans six.itervalues ​​(self._plugins)]
Fichier "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", ligne 126, en préparation
self._initialized.prepare ()
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/configurator.py", ligne 137, en préparation
self.parser = parser.NginxParser (self.conf ('racine-serveur'))
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", ligne 38, dans __init__
self.load ()
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", ligne 45, en cours de chargement
self._parse_recursively (self.config_root)
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", ligne 66, dans _parse_recursively
self._parse_recursively (sous-entrée [1])
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", ligne 56, dans _parse_recursively
arbres = self._parse_files (chemin de fichier)
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", ligne 206, dans _parse_files
parsed = nginxparser.load (_fichier)
Fichier "/usr/lib/python3/dist-packages/certbot_nginx/nginxparser.py", ligne 123, en cours de chargement
renvoyer des charges (_file.read ())
Fichier "/usr/lib/python3.4/encodings/ascii.py", ligne 26, en décodage
return codecs.ascii_decode (entrée, self.errors) [0]
UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xd1 en position 31: ordinal pas dans la plage (128)
2018-05-05 12: 28: 44,346: ERREUR: certbot.log : Une erreur inattendue s'est produite:

Par exemple, les fichiers de type mime contiennent ces lignes:

application/vnd.geocube+xml                     g3 g³;

g³ fera lever l'erreur UnicodeDecodeError

> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(62)_parse_recursively()
-> elif entry[0] == ['http'] or entry[0] == ['server']:
(Pdb) l
 57             for tree in trees:
 58                 for entry in tree:
 59                     if _is_include_directive(entry):
 60                         # Parse the top-level included file
 61                         self._parse_recursively(entry[1])
 62  ->                 elif entry[0] == ['http'] or entry[0] == ['server']:
 63                         # Look for includes in the top-level 'http'/'server' context
 64                         for subentry in entry[1]:
 65                             if _is_include_directive(subentry):
 66                                 self._parse_recursively(subentry[1])
 67                             elif entry[0] == ['http'] and subentry[0] == ['server']:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(64)_parse_recursively()
-> for subentry in entry[1]:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(65)_parse_recursively()
-> if _is_include_directive(subentry):
(Pdb) subentry
['include', 'mime.types']
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(66)_parse_recursively()
-> self._parse_recursively(subentry[1])
(Pdb) s
--Call--
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(47)_parse_recursively()
-> def _parse_recursively(self, filepath):
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(55)_parse_recursively()
-> filepath = self.abs_path(filepath)
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(56)_parse_recursively()
-> trees = self._parse_files(filepath)
(Pdb) s
--Call--
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(189)_parse_files()
-> def _parse_files(self, filepath, override=False):
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(198)_parse_files()
-> files = glob.glob(filepath) # nginx on unix calls glob(3) for this
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(201)_parse_files()
-> trees = []
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(202)_parse_files()
-> for item in files:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(203)_parse_files()
-> if item in self.parsed and not override:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(205)_parse_files()
-> try:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(206)_parse_files()
-> with open(item) as _file:
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/parser.py(207)_parse_files()
-> parsed = nginxparser.load(_file)
(Pdb) s
--Call--
> /usr/lib/python3.6/site-packages/certbot_nginx/nginxparser.py(115)load()
-> def load(_file):
(Pdb) n
> /usr/lib/python3.6/site-packages/certbot_nginx/nginxparser.py(123)load()
-> return loads(_file.read())
(Pdb) loads
<function loads at 0x7faacac85048>
(Pdb) s
--Call--
> /usr/lib/python3.6/encodings/ascii.py(25)decode()
-> def decode(self, input, final=False):
(Pdb) --KeyboardInterrupt--
(Pdb) n
> /usr/lib/python3.6/encodings/ascii.py(26)decode()
-> return codecs.ascii_decode(input, self.errors)[0]
(Pdb) n
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 10453: ordinal not in range(128)
> /usr/lib/python3.6/encodings/ascii.py(26)decode()
-> return codecs.ascii_decode(input, self.errors)[0]

Merci pour l'information supplémentaire!

Après avoir lu un commentaire sur un autre fil de discussion par l'utilisateur @egberts , j'ai exécuté la commande suivante:

grep -r -P '[^\x00-\x7f]' /etc/apache2 /etc/letsencrypt /etc/nginx

Cette commande a trouvé le caractère incriminé "´" dans un fichier .conf du commentaire. Après l'avoir supprimé (vous pouvez modifier les commentaires comme vous le souhaitez) et recharger nginx, tout a fonctionné à nouveau.

@TommyZG pouvez-vous me dire de changer quel fichier?

J'ai trouvé que lorsque j'utilise certbot-auto dans Windows Remote, cela me lance cette erreur, mais lorsque je l'utilise dans Linux Remote, cela fonctionne très bien

J'ai eu le même problème. J'ai trouvé la solution de contournement suivante (sur Ubuntu):

  1. Exécuter dans une console:
    bash sudo locale-gen "en_US.UTF-8" sudo dpkg-reconfigure locales
  2. Ajoutez la ligne LC_ALL="en_US.UTF-8" au fichier /etc/default/locale .
  3. Reconnectez SSH.

Après l'avoir fait, exécutez cerbot --nginx succès.

Salut! La raison est que si vous avez des lettres non ascii dans la configuration de nginx (même dans les commentaires !!!), cela ne fonctionnera pas.

Clôture en faveur du duplicata # 5337, qui a un PR au # 5341.

@TommyZG pouvez-vous me dire de changer quel fichier?

C'était dans l'un de mes fichiers .conf. Vous en avez d'autres. C'était dans la ligne de commentaire.

J'ai eu un problème similaire, c'était dans /etc/nginx/conf.d/default.conf lignes 13 à 17:

# 1) limit_req  ^`^s to limit the rate of requests from one IP
# 2) limit_conn  ^`^s to limit the number of connections from one IP
# 3) client_body_timeout  ^`^s to close the connections with slow body
# 4) client_header_timeout  ^`^s to close the connections with slow headers
# 5) send_timeout  ^`^s If the client does not receive anything within this time, the connection is closed.

J'ai supprimé ces commentaires et cela a fonctionné.

Merci @egberts & @TommyZG pour le conseil grep.

Hy ✌🏻,
vous ne devez utiliser qu'un autre terminal.
J'ai le même problème en utilisant le terminal mac, que j'ai utilisé Windows bash pour le faire fonctionner.

J'ai eu le même problème. J'ai trouvé la solution de contournement suivante (sur Ubuntu):

  1. Exécuter dans une console:
    shell sudo locale-gen "en_US.UTF-8" sudo dpkg-reconfigure locales
  2. Ajoutez la ligne LC_ALL="en_US.UTF-8" au fichier /etc/default/locale .
  3. Reconnectez SSH.

Après l'avoir fait, exécutez cerbot --nginx succès.

Merci, cela a fonctionné pour moi.

Cette page vous a été utile?
0 / 5 - 0 notes