Como instalar plugins Certbot?

19

Instalei o Certbot seguindo este tutorial :

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

E agora eu quero configurar meu certificado, mas preciso do dns-digitaloceanplugin:

# certbot certonly --dns-digitalocean
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Could not choose appropriate plugin: The requested dns-digitalocean plugin does not appear to be installed
The requested dns-digitalocean plugin does not appear to be installed

Eu tentei instalá-lo com pip:

pip install certbot-dns-digitalocean

Mas aparentemente a versão apt-get não está "vendo".

Como faço para instalá-lo corretamente?

mpen
fonte

Respostas:

15

Melhor método, graças às respostas dos outros por me ajudarem a chegar a isso.

Determine quais plugins estão instalados atualmente:

# certbot-auto plugins
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* apache
Description: Apache Web Server plugin - Beta
Interfaces: IAuthenticator, IInstaller, IPlugin
Entry point: apache = certbot_apache.entrypoint:ENTRYPOINT

* nginx
Description: Nginx Web Server plugin
Interfaces: IAuthenticator, IInstaller, IPlugin
Entry point: nginx = certbot_nginx.configurator:NginxConfigurator

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

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

Determine onde o seu certbot (no meu caso certbot-auto) está instalado:

# find / -name certbot
/opt/eff.org/certbot
...

Entre no Virtual Env e instale o plug-in

cd /opt/eff.org/certbot/venv
source bin/activate
pip install certbot-dns-google
deactivate

Verifique os plug-ins do certbot novamente

# certbot-auto plugins
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* apache
Description: Apache Web Server plugin - Beta
Interfaces: IAuthenticator, IInstaller, IPlugin
Entry point: apache = certbot_apache.entrypoint:ENTRYPOINT

* dns-google
Description: Obtain certificates using a DNS TXT record (if you are using Google
Cloud DNS for DNS).
Interfaces: IAuthenticator, IPlugin
Entry point: dns-google = certbot_dns_google.dns_google:Authenticator

* nginx
Description: Nginx Web Server plugin
Interfaces: IAuthenticator, IInstaller, IPlugin
Entry point: nginx = certbot_nginx.configurator:NginxConfigurator

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

* webroot
Description: Place files in webroot directory
Interfaces: IAuthenticator, IPlugin
Entry point: webroot = certbot.plugins.webroot:Authenticator
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ryan
fonte
Observe que isso pode ser complicado para o cron; as atualizações da versão certbot-auto farão com que você precise agendar a parte "pip install" novamente.
Ryan
10

Primeira corrida

# type certbot
certbot is hashed (/usr/bin/certbot)

Para descobrir para onde certbotestá instalado. Ou command -v certbotse você preferir.

Em seguida, execute head /usr/bin/certbote observe qual versão do Python está usando:

#!/usr/bin/python3

No meu caso, ele estava usando Python 3.

Percebi na minha saída do pip que ele estava tentando instalar um pacote Python 2.7:

# pip install certbot-dns-digitalocean
Requirement already satisfied: certbot-dns-digitalocean in /usr/local/lib/python2.7/dist-packages

Então, como obtemos o pip para instalar pacotes Python 3? Basta copiar as instruções aqui :

cd /tmp
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
rm get-pip.py

Agora você deve ter o pip3comando, então execute isso:

pip3 install certbot-dns-digitalocean

E agora tente novamente:

# certbot plugins
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
* dns-digitalocean
Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean
for DNS).
Interfaces: IAuthenticator, IPlugin
Entry point: dns-digitalocean =
certbot_dns_digitalocean.dns_digitalocean:Authenticator
mpen
fonte
se você encontrar esse erro, ImportError: cannot import name 'sysconfig'instale o pacote python3-distutils. Isso e o uso do sudo fizeram o truque. Eu tenho o plugin route53 carregado.
DKebler 17/01
8

Agora (julho de 2018), você poderá usar

pip install certbot-dns-digitalocean

ou

git clone https://github.com/certbot/certbot.git
cd certbot/certbot-dns-digitalocean/
python setup.py install

Você pode precisar de sudoprivilégios para ambos.

Após a instalação, talvez você não consiga ver o plug-in com certbot plugins, mas poderá conseguir certbot certonly --dns-digitalocean.

M. Davis
fonte
1
Espere. Como você instalou o certbot? Acho que meu problema foi que instalei o certbot com apte certbot-dns-digitaloceancom o pipcertbot não foi capaz de encontrá-lo.
MPEN
Sim, e eu instalei da mesma maneira que você. Talvez a maneira como você instalou pipseja diferente? Eu aptinstalado python 2.7 e, em seguida, sudo easy_install pip(pode ser necessário instalar um apt destes: python-setuptools python-dev build-essential)
M. Davis
3

Você precisa usar o Docker para usar plug-ins de DNS. De plugins DNS :

Esses plugins ainda estão sendo empacotados por muitas distribuições e não podem ser instalados no momento certbot-auto. Se, no entanto, você estiver confortável em instalar os certificados, poderá executar esses plug-ins com o Docker .

erickgnavar
fonte
O documento também diz : "A maioria dos usuários deve usar os pacotes do sistema operacional (consulte as instruções em certbot.eff.org) ou, como alternativa , certbot-auto. Você deve usar o Docker apenas se tiver certeza de que sabe o que está fazendo e por um bom motivo. para fazer isso ".
Totor
2

A maneira como você instala os plug-ins do certbot depende de como você instalou o próprio certbot. Se você instalou o certbot usando algum gerenciador de pacotes (apt, rpm, brew ...), deverá procurar plug-ins certbot compatíveis no repositório do gerenciador de pacotes.

O Let's Encrypt também suporta um método de instalação alternativo: o wrapper certbot-auto. Esse wrapper cria uma instalação virtual privada do Python (geralmente dentro /opt/eff.org/certbot/venv) e instala o certbot nesse diretório. Um recurso interessante do certbot-auto é que ele mantém automaticamente o cliente certbot atualizado. Uma desvantagem importante é que ele não suporta oficialmente a instalação de plug-ins (ou seja, além de quatro plug-ins instalados por padrão).

É fácil o suficiente para contornar esta limitação, conforme descrito na solução de Ryan G . No entanto, os plug-ins instalados por esse procedimento serão perdidos sempre que o certbot-auto for atualizado, o que pode resultar em falhas aleatórias na renovação. Aqui, tivemos algumas situações em que alguns certificados quase atingiram a validade devido a esse problema. Vários tíquetes discutem esse problema no rastreador de erros do certbot, e a equipe reconhece o problema, mas parece que ainda pode demorar muito para que o problema seja resolvido.

Portanto, se estiver usando o certbot-auto em uma configuração automatizada, é desejável impedir a atualização automática do certbot-auto (executando-o --no-self-upgrade) ou implementar alguma estratégia para garantir que os plug-ins necessários sejam reinstalados automaticamente sempre que o certbot for atualizado.

Uma solução possível para garantir que os plug-ins necessários estejam instalados é adicionar um wrapper ao redor do certbot-auto. Esse invólucro pode basicamente parecer da seguinte maneira:

#!/bin/bash

# The list of plugins to be installed
CERTBOT_PLUGINS="certbot-dns-route53"

# Force the venv directory to be where we can easily find it
export VENV_PATH="/opt/eff.org/certbot/venv"

# Force certbot-auto to be where we expect it to be
export CERTBOT_AUTO="/usr/local/bin/certbot-auto-upstream"

# Force certbot-auto to bootstrap or upgrade itself, but do no more
"${CERTBOT_AUTO}"  --install-only  "$@"

# Check if required plugins are installed; install them if they are missing
(
    cd ${VENV_PATH}
    source bin/activate

    for plugin in $CERTBOT_PLUGINS ; do
        if ! pip show -q "$plugin" ; then
            pip install "$plugin"
        fi
    done

    deactivate
)

# Execute the actual certbot command
"${VENV_PATH}/bin/letsencrypt" "$@"

Disponibilizei uma versão mais completa desse invólucro aqui ; as únicas diferenças com a versão mais longa é que ela garante que o wrapper esteja sendo executado como raiz e manipula adequadamente o --helpargumento.

Para instalar esse wrapper, faça o download do certbot-autoprograma oficial para /usr/local/bin/certbot-auto-upstreame copie o wrapper para /usr/local/bin/certbot-auto. Verifique se os dois arquivos têm privilégios adequados ( chown root:root /usr/local/bin/certbot-auto*, então chmod 755 /usr/local/bin/certbot-auto*). No arquivo wrapper, verifique se a linha CERTBOT_PLUGINS="..."inclui a lista de plug-ins que você realmente precisa. E é isso. Simplesmente use o certbot-autocomando, como você faria anteriormente, e esqueça o certbot-auto-upstreamarquivo.

jwatkins
fonte
1

Se você está no ubuntu ou debian, pode pegar os seguintes pacotes no debian testing (buster)

python3-certbot-dns-digitalocean_0.23.0-2_all.deb python3-digitalocean_1.13.2-1_all.deb

Matthew Darwin
fonte
0

Eu tive o mesmo problema, depois que atualizei o certbot no OS XI, o plug-in digitalocean não pôde aparecer, mesmo depois de reinstalá-lo pip install certbot-dns-digitalocean.

A solução foi desinstalá-lo e reinstalá-lo. Eu usei o sudo apenas para ser seguro:

sudo pip uninstall certbot-dns-digitalocean 
sudo pip install certbot-dns-digitalocean

Apareceu então ok na certbot pluginslista.

Alan Lawson
fonte