Не может запустить certbot на сервере Ubuntu 14 для шифрования

У меня уже было шифрование на сервере Ubuntu (Python v2.7.6), но он больше не работает, жалуясь, что я использую старый клиент. Я скачал клиент certbot для Ubuntu 14, но когда я запускаю следующую команду, я получаю скопированную ниже ошибку - любая идея о том, как устранить эту проблему дальше:

./certbot-auto certonly --text --webroot -w /usr/share/nginx/html -d actualurl.com --keep-until-expiring --expand --agree-tos --email replaced@gmail.com


2016-07-31 20:50:48,178:DEBUG:certbot.plugins.selection:Selected authenticator <certbot.plugins.webroot.Authenticator object at 0x7f45863102d0> 
and installer None
2016-07-31 20:50:48,350:DEBUG:root:Sending GET request to https://acme-v01.api.letsencrypt.org/directory284. args: (), kwargs: {}
2016-07-31 20:50:48,354:INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
2016-07-31 20:50:48,803:DEBUG:requests.packages.urllib3.connectionpool:"GET /directory284 HTTP/1.1" 404 19
2016-07-31 20:50:48,805:DEBUG:root:Received <Response [404]>. Headers: {'Content-Length': '19', 'X-Content-Type-Options': 'nosniff', 'Boulder-Re
quest-Id': 'gH76WSwBJgzedpyjF8X3TAVVYz0-TLkaiNGTjQa3Weg', 'Expires': 'Sun, 31 Jul 2016 20:50:48 GMT', 'Server': 'nginx', 'Connection': 'keep-ali
ve', 'Pragma': 'no-cache', 'Cache-Control': 'max-age=0, no-cache, no-store', 'Date': 'Sun, 31 Jul 2016 20:50:48 GMT', 'Content-Type': 'text/plai
n; charset=utf-8'}. Content: '404 page not found\n'
2016-07-31 20:50:48,805:DEBUG:acme.client:Received response <Response [404]> (headers: {'Content-Length': '19', 'X-Content-Type-Options': 'nosni
ff', 'Boulder-Request-Id': 'gH76WSwBJgzedpyjF8X3TAVVYz0-TLkaiNGTjQa3Weg', 'Expires': 'Sun, 31 Jul 2016 20:50:48 GMT', 'Server': 'nginx', 'Connec
tion': 'keep-alive', 'Pragma': 'no-cache', 'Cache-Control': 'max-age=0, no-cache, no-store', 'Date': 'Sun, 31 Jul 2016 20:50:48 GMT', 'Content-T
ype': 'text/plain; charset=utf-8'}): '404 page not found\n'
2016-07-31 20:50:48,806:DEBUG:certbot.main:Exiting abnormally:
Traceback (most recent call last):
  File "/root/.local/share/letsencrypt/bin/letsencrypt", line 11, in <module>
    sys.exit(main())
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/main.py", line 744, in main
    return config.func(config, plugins)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/main.py", line 550, in obtain_cert
    le_client = _init_le_client(config, auth, installer)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/main.py", line 360, in _init_le_client
    acc, acme = _determine_account(config)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/main.py", line 345, in _determine_account
    config, account_storage, tos_cb=_tos_cb)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/client.py", line 118, in register
    acme = acme_from_config_key(config, key)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/client.py", line 42, in acme_from_config_key
    return acme_client.Client(config.server, key=key, net=net)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/client.py", line 63, in __init__
    self.net.get(directory).json())
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/client.py", line 631, in get
    self._send_request('GET', url, **kwargs), content_type=content_type)
  File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/client.py", line 578, in _check_response
    raise errors.ClientError(response)
ClientError: <Response [404]>

Я также запустил certbot-auto с certonly, но получил ту же ошибку.

версия диалога

Version: 1.2-20130928

lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

Я скачал certbot используя

wget https://dl.eff.org/certbot-auto

Кроме того, процесс nginx работал и все еще имел более старый сертификат шифрования let. С тех пор я попытался удалить это и перезапустил nginx, но я все еще получаю ту же ошибку. Я использую прокси-сервер HA на порту 80 и перенаправляю на Nginx.

У меня установлены следующие плагины certbot:

* apache
Description: Apache Web Server - Alpha
Interfaces: IAuthenticator, IInstaller, IPlugin
Entry point: apache = certbot_apache.configurator:ApacheConfigurator

* webroot
Description: Place files in webroot directory
Interfaces: IAuthenticator, IPlugin
Entry point: webroot = certbot.plugins.webroot:Authenticator

* standalone
Description: Automatically use a temporary webserver
Interfaces: IAuthenticator, IPlugin
Entry point: standalone = certbot.plugins.standalone:Authenticator

2 ответа

Решение

Я следовал за шагами по этой ссылке, и это работало для меня (смог получить сертификат).

https://github.com/eustasy/certbot-with-nginx

Единственное, чего не хватало в этих шагах, это убедиться, что мы скопировали файл nginx.welll-known.conf в каталог /etc/nginx (или просто создали ссылку). Я использую nginx для обслуживания контента (я отключил прослушивание HA Proxy на порте 80, чтобы убедиться, что эта настройка работает).

Поскольку я не люблю останавливать веб-сервер (по многим причинам) или любые препроцессоры перед ним (HAProxy, Varnish и т. Д.), Я использовал последнюю версию certbot-auto "s pre-hook а также post-hook Варианты этого способа:

certbot-auto certonly --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 44033 \
  --pre-hook  "iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 44033" \
  --post-hook "iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 44033"

Что произойдет, если я выполню эту команду:

  1. certbot-auto проверяет, все ли сертификаты требуют обновления
  2. Если какой-либо сертификат нуждается в обновлении, он выполняет pre-hook: Создайте перенаправление с порта 443 (тот, который прослушивает веб-сервер) на порт 44033 (тот, certbot-auto слушает)
  3. После завершения обновления выполняется post-hook: Удалите перенаправление, созданное на шаге 2.

Есть много преимуществ:

  • Как упоминалось ранее, мне не нужно останавливать какие-либо процессы, которые в данный момент прослушивают порт 443 (или 80).
  • Кроме того, мне не нужно менять конфигурацию веб-сервера... и не забывать отменить изменения впоследствии
  • Он сам содержится в одном файле. Теперь у меня есть следующий скрипт внутри /etc/cron.daily:

letsencrypt-renew.sh

#!/bin/bash
Redir() {
    echo "iptables -t nat $1 PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 44033"
}
certbot-auto renew --standalone \
    --preferred-challenges tls-sni-01 --tls-sni-01-port 44033 \
    --pre-hook "$(Redir -I)" \
    --post-hook "$(Redir -D)"

(Обратите внимание, что просто заменив renew с certonly Вы также можете использовать этот скрипт для первоначального запроса сертификатов. замещать renew с ${1:-renew} чтобы разрешить указывать действие как аргумент скрипта.)

Другие вопросы по тегам