Certbot: tidak dapat menjalankan certbot --nginx - UnicodeDecodeError: 'ascii'

Dibuat pada 12 Nov 2017  ·  14Komentar  ·  Sumber: certbot/certbot

Sistem operasi saya adalah (termasuk versi):

ArchLinux (Kernel 4.13.11-1)

Saya menginstal Certbot dengan (certbot-auto, manajer paket OS, pip, dll):

pacman -S cerbot-nginx

Saya menjalankan perintah ini dan menghasilkan keluaran ini:

cerbot --nginx

Perilaku Certbot berbeda dari yang saya harapkan karena:

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.

Berikut adalah log Certbot yang menunjukkan masalah tersebut (jika tersedia):

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:

Berikut adalah blok server nginx yang relevan atau Apache virtualhost untuk domain yang saya konfigurasi:

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

Komentar yang paling membantu

Setelah membaca komentar di utas lain oleh pengguna @egberts , saya menjalankan perintah berikut:

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

Perintah itu menemukan karakter yang melanggar "´" dalam satu file .conf di komentar. Setelah menghapusnya (Anda dapat mengedit komentar sesuai keinginan) dan memuat ulang nginx, semuanya berfungsi kembali.

Semua 14 komentar

Kami akan melihat ini, karena ini pasti sesuatu yang harus kami tangani, tetapi untuk mengatasinya, ganti tanda kutip ganda di komentar server_tokens directive: “Server”

@jooi

05-05-2018 12: 28: 44,181: DEBUG: certbot.main : versi certbot: 0.22.2
05-05 2018 12: 28: 44,181: DEBUG: certbot.main : Argumen: ['--nginx']
05-05-2018 12: 28: 44,181: DEBUG: certbot.main : Plugin yang ditemukan: PluginsRegistry (PluginEntryPoint # manual, PluginEntryPoint # nginx, PluginEntryPoint # null, PluginEntryPoint # standalone, PluginEntryPoint # webroot)
05-05 2018 12: 28: 44,193: DEBUG: certbot.log : Level logging root disetel ke 20
05-05 2018 12: 28: 44,193: INFO: certbot.log : Menyimpan log debug ke /var/log/letsencrypt/letsencrypt.log
05-05-2018 12: 28: 44,194: DEBUG: certbot.plugins.selection : Meminta
05-05 2018 12: 28: 44,343: DEBUG: certbot.log : Keluar secara tidak normal:
Traceback (panggilan terakhir terakhir):
File "/ usr / bin / certbot", baris 11, dalam
load_entry_point ('certbot == 0.22.2', 'console_scripts', 'certbot') ()
File "/usr/lib/python3/dist-packages/certbot/main.py", baris 1266, di main
kembali config.func (config, plugins)
File "/usr/lib/python3/dist-packages/certbot/main.py", baris 1018, sedang dijalankan
installer, authenticator = plug_sel.choose_configurator_plugins (config, plugins, "run")
File "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", baris 189, di choose_configurator_plugins
authenticator = installer = pick_configurator (config, req_inst, plugin)
File "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", baris 25, di pick_configurator
(interfaces.IAuthenticator, interfaces.IInstaller))
File "/usr/lib/python3/dist-packages/certbot/plugins/selection.py", baris 77, di pick_plugin
diverifikasi.prepare ()
File "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", baris 245, dalam persiapan
kembalikan [plugin_ep.prepare () untuk plugin_ep di six.itervalues ​​(self._plugins)]
File "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", baris 245, di
kembalikan [plugin_ep.prepare () untuk plugin_ep di six.itervalues ​​(self._plugins)]
File "/usr/lib/python3/dist-packages/certbot/plugins/disco.py", baris 126, dalam persiapan
self._initialized.prepare ()
File "/usr/lib/python3/dist-packages/certbot_nginx/configurator.py", baris 137, dalam persiapan
self.parser = parser.NginxParser (self.conf ('server-root'))
File "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", baris 38, di __init__
self.load ()
File "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", baris 45, sedang dimuat
self._parse_recursively (self.config_root)
File "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", baris 66, dalam _parse_recursively
self._parse_recursively (entri sub-entri [1])
File "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", baris 56, dalam _parse_recursively
pohon = self._parse_files (filepath)
File "/usr/lib/python3/dist-packages/certbot_nginx/parser.py", baris 206, di _parse_files
parsed = nginxparser.load (_file)
File "/usr/lib/python3/dist-packages/certbot_nginx/nginxparser.py", baris 123, sedang dimuat
beban kembali (_file.read ())
File "/usr/lib/python3.4/encodings/ascii.py", baris 26, dalam decode
mengembalikan codecs.ascii_decode (masukan, kesalahan sendiri) [0]
UnicodeDecodeError: codec 'ascii' tidak dapat mendekode byte 0xd1 di posisi 31: ordinal tidak dalam jangkauan (128)
05-05 2018 12: 28: 44,346: ERROR: certbot.log : Terjadi kesalahan yang tidak terduga:

Misalnya, file jenis mime berisi baris ini:

application/vnd.geocube+xml                     g3 g³;

g³ akan memunculkan 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]

Terima kasih atas informasi tambahannya!

Setelah membaca komentar di utas lain oleh pengguna @egberts , saya menjalankan perintah berikut:

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

Perintah itu menemukan karakter yang melanggar "´" dalam satu file .conf di komentar. Setelah menghapusnya (Anda dapat mengedit komentar sesuai keinginan) dan memuat ulang nginx, semuanya berfungsi kembali.

@TommyZG dapatkah kamu memberitahu saya mengubah file yang mana?

Saya menemukan bahwa ketika saya menggunakan certbot-auto di remote windows, itu membuat saya kesalahan ini, tetapi ketika saya menggunakannya di remote linux, itu berfungsi dengan baik

Saya memiliki masalah yang sama. Saya telah menemukan solusi berikut (di Ubuntu):

  1. Jalankan di konsol:
    bash sudo locale-gen "en_US.UTF-8" sudo dpkg-reconfigure locales
  2. Tambahkan baris LC_ALL="en_US.UTF-8" ke file /etc/default/locale .
  3. Hubungkan kembali SSH.

Setelah melakukannya, menjalankan cerbot --nginx sukses.

Hai! Alasannya adalah jika Anda memiliki beberapa huruf non ascii di konfigurasi nginx (bahkan di komentar !!!) itu tidak akan berfungsi.

Menutup demi duplikat # 5337, yang memiliki PR di # 5341.

@TommyZG dapatkah kamu memberitahu saya mengubah file yang mana?

Itu ada di salah satu file .conf saya. Anda memiliki orang lain. Itu ada di baris komentar.

Saya mendapat masalah serupa, itu di /etc/nginx/conf.d/default.conf baris 13 hingga 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.

Saya menghapus komentar itu dan berhasil.

Terima kasih @egberts & @TommyZG atas tip

Hy ✌🏻,
Anda sebaiknya hanya menggunakan terminal lain.
Saya memiliki masalah yang sama saat menggunakan terminal mac, daripada saya menggunakan windows bash untuk membuatnya berfungsi.

Saya memiliki masalah yang sama. Saya telah menemukan solusi berikut (di Ubuntu):

  1. Jalankan di konsol:
    shell sudo locale-gen "en_US.UTF-8" sudo dpkg-reconfigure locales
  2. Tambahkan baris LC_ALL="en_US.UTF-8" ke file /etc/default/locale .
  3. Hubungkan kembali SSH.

Setelah melakukannya, menjalankan cerbot --nginx sukses.

Terima kasih, ini berhasil untuk saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat