如何安装Certbot插件?


19

我按照本教程安装了Certbot :

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

现在我想设置我的证书,但是我需要dns-digitalocean插件:

# 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

我尝试使用安装它pip

pip install certbot-dns-digitalocean

但是很显然,apt-get版本没有“看到”它。

如何正确安装?

Answers:


15

更好的方法,这要感谢其他人的帮助。

确定当前安装了哪些插件:

# 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

确定您的certbot(在我的情况下为certbot-auto)的安装位置:

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

进入虚拟环境并安装插件

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

再次验证certbot插件

# 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

请注意,这对于cron来说可能是棘手的,certbot-auto版本升级将导致您需要再次cron“ pip install”部分。
Ryan

10

第一次运行

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

找出certbot安装在哪里。或者,command -v certbot如果您愿意。

然后运行head /usr/bin/certbot并注意它使用的是哪个版本的Python:

#!/usr/bin/python3

就我而言,它使用的是Python 3。

我从我的pip输出中注意到,它正在尝试安装Python 2.7软件包:

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

那么,如何获得pip来安装Python 3软件包呢?只需从此处复制说明即可:

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

现在您应该有了pip3命令,因此请运行以下命令:

pip3 install certbot-dns-digitalocean

现在再试一次:

# 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

如果您遇到此错误ImportError: cannot import name 'sysconfig'安装包python3-distutils。那并使用sudo达到了目的。我已加载route53插件。
DKebler

8

现在(2018年7月),您应该可以使用

pip install certbot-dns-digitalocean

要么

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

您可能都需要sudo特权。

安装后,您可能看不到带有的插件certbot plugins,但您应该可以certbot certonly --dns-digitalocean


1
不挂断。您如何安装certbot?我认为我的问题是我aptcertbot-dns-digitalocean一起安装了certbot ,pip而certbot无法找到它。
mpen

是的,我以与您相同的方式进行安装。也许您安装的方式pip不同?我apt安装Python 2.7版,然后sudo easy_install pip(可能需要一个恰当的安装其中:python-setuptools python-dev build-essential
M.戴维斯

3

您必须使用Docker才能使用dns插件。从DNS插件

这些插件仍处于许多发行版本的打包过程中,目前无法通过进行安装certbot-auto。但是,如果您自己愿意安装证书,则可以使用Docker运行这些插件。


Doc 还说:“大多数用户应该使用操作系统软件包(请参阅certbot.eff.org上的说明),或者作为备用certbot-auto。只有在确定知道自己在做什么并且有充分理由的情况下,才应使用Docker。这样做。”
Totor

2

安装certbot插件的方式取决于安装certbot本身的方式。如果使用某些软件包管理器(apt,rpm,brew ...)安装了certbot,则应在该软件包管理器的存储库中查找兼容的certbot插件。

让我们的加密还支持另一种安装方法:certbot-auto包装器。该包装器创建了一个专用的Python虚拟安装(通常在中/opt/eff.org/certbot/venv),并将certbot安装到该目录中。certbot-auto的一个不错的功能是它可以自动使certbot客户端保持最新状态。一个主要的缺点是它不正式支持插件安装(即,除了默认安装的四个插件之外)。

Ryan G的解决方案中所述,解决此限制很容易。但是,每次certbot-auto更新本身时,通过该过程安装的插件都会丢失,这可能导致随机续订失败。在这种情况下,由于这种问题,我们遇到了一些证书即将到期的情况。有几张票在certbot的Bug跟踪器上讨论了此问题,并且团队确认了该问题,但看来要真正解决该问题可能还有很长的路要走。

因此,如果在自动设置中使用certbot-auto,则希望防止certbot-auto的自我更新(通过使用来运行--no-self-upgrade),或者希望实施某种策略以确保每次certbot更新时都自动重新安装所需的插件。

确实确保安装了必需的插件的可能解决方案是在certbot-auto周围添加包装器。该包装实际上可能如下所示:

#!/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" "$@"

我做了一个提供该包装的更完整版本在这里 ; 与较长版本的唯一区别在于,它确保包装程序以root身份运行,并且可以正确处理--help参数。

要安装该包装器,请将官方certbot-auto程序下载到/usr/local/bin/certbot-auto-upstream,然后将包装器复制到/usr/local/bin/certbot-auto。确保两个文件都具有适当的特权(chown root:root /usr/local/bin/certbot-auto*,然后是chmod 755 /usr/local/bin/certbot-auto*)。在包装文件中,确保该行CERTBOT_PLUGINS="..."包含您实际需要的插件列表。就是这样。certbot-auto像以前一样简单地使用命令,而无需考虑certbot-auto-upstream文件。


1

如果您使用的是ubuntu或debian,则可以从debian测试中获取以下软件包(破坏程序)

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



0

我在OS XI上更新certbot之后也遇到了同样的问题,即使使用进行了重新安装,也无法使digitalocean插件出现pip install certbot-dns-digitalocean

解决方案是先将其卸载,然后重新安装。我使用sudo只是为了安全:

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

然后,它在certbot plugins列表中显示为正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.