จะติดตั้งปลั๊กอิน 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

แต่เห็นได้ชัดว่าเวอร์ชันที่ฉลาดรับไม่ได้ "เห็น" มัน

ฉันจะติดตั้งอย่างถูกต้องได้อย่างไร?

คำตอบ:


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

เข้าสู่ Virtual Env และติดตั้งปลั๊กอิน

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 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 ทำอุบาย ฉันโหลดปลั๊กอินเส้นทาง 53 แล้ว
DKebler

8

ตอนนี้ (กรกฎาคม 2018) คุณควรจะสามารถใช้ได้เช่นกัน

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 ได้อย่างไร? ฉันคิดว่าปัญหาของฉันคือฉันติดตั้ง certbot ด้วยaptและcertbot-dns-digitaloceanด้วยpipและ certbot ไม่สามารถค้นหาได้
mpen

ใช่และฉันติดตั้งแบบเดียวกับที่คุณทำ อาจเป็นวิธีที่คุณติดตั้งpipแตกต่างกันอย่างไร ฉันaptติดตั้ง python 2.7 แล้วsudo easy_install pip(อาจต้องมีการติดตั้ง apt ต่อไปนี้python-setuptools python-dev build-essential)
M. Davis

3

คุณต้องใช้นักเทียบท่าเพื่อใช้ปลั๊กอิน DNS จากDNS Plugins :

certbot-autoปลั๊กอินเหล่านี้ยังคงอยู่ในขั้นตอนของการบรรจุโดยการกระจายจำนวนมากและจะยังไม่สามารถติดตั้งได้ แต่ถ้าคุณมีความสะดวกสบายในการติดตั้งใบรับรองด้วยตัวคุณเองคุณสามารถเรียกใช้ปลั๊กอินเหล่านี้มีหาง


Doc ยังกล่าวอีกว่า : "ผู้ใช้ส่วนใหญ่ควรใช้แพ็คเกจระบบปฏิบัติการ (ดูคำแนะนำที่ certbot.eff.org) หรือเป็นทางเลือกcertbot-autoคุณควรใช้ Docker เฉพาะเมื่อคุณแน่ใจว่าคุณรู้ว่าคุณกำลังทำอะไรและมีเหตุผลที่ดี ทำเช่นนั้น "
Totor

2

วิธีที่คุณติดตั้งปลั๊กอิน certbot ขึ้นอยู่กับวิธีที่คุณติดตั้ง certbot เอง หากคุณติดตั้ง certbot โดยใช้ตัวจัดการแพคเกจ (apt, rpm, brew ... ) ดังนั้นคุณควรมองหาปลั๊กอิน certbot ที่ใช้งานร่วมกันได้ในที่เก็บของตัวจัดการแพ็คเกจ

Let's Encrypt ยังรองรับวิธีการติดตั้งทางเลือก: wrapper certbot-auto wrapper นี้สร้างการติดตั้ง Python เสมือนส่วนตัว (โดยทั่วไป/opt/eff.org/certbot/venv) และติดตั้ง certbot ลงในไดเรกทอรีนั้น คุณสมบัติที่ดีของ certbot-auto คือมันทำให้ไคลเอนต์ certbot เป็นปัจจุบันโดยอัตโนมัติ ข้อเสียที่สำคัญคือไม่สนับสนุนการติดตั้งปลั๊กอินอย่างเป็นทางการ (นั่นคือนอกเหนือจากสี่ปลั๊กอินที่ติดตั้งตามค่าเริ่มต้น)

มันก็เพียงพอที่ง่ายต่อการหลีกเลี่ยงข้อ จำกัด นี้ตามที่อธิบายในการแก้ปัญหาไรอันจี อย่างไรก็ตามปลั๊กอินที่ติดตั้งผ่านขั้นตอนนั้นจะหายไปทุกครั้งที่ certbot-auto อัพเดตตัวเองซึ่งอาจส่งผลให้เกิดความล้มเหลวในการต่ออายุแบบสุ่ม ที่นี่เรามีสถานการณ์บางอย่างที่ใบรับรองเกือบถึงหมดอายุเนื่องจากปัญหาดังกล่าว ตั๋วหลายใบพูดถึงปัญหานี้ในตัวติดตามข้อผิดพลาดของ certbot และทีมรับทราบปัญหา แต่ดูเหมือนว่ามันอาจจะยังอีกนานก่อนที่ปัญหาจะได้รับการแก้ไข

ดังนั้นหากใช้ certbot-auto ในการตั้งค่าอัตโนมัติเป็นสิ่งที่พึงประสงค์ที่จะป้องกันการปรับปรุงตัวเองของ certbot-auto (โดยการรันด้วย--no-self-upgrade) หรือเพื่อใช้กลยุทธ์บางอย่างเพื่อให้แน่ใจว่าปลั๊กอินที่ต้องการจะถูกติดตั้งใหม่โดยอัตโนมัติทุกครั้ง

ทางออกที่เป็นไปได้เพื่อให้แน่ใจว่ามีการติดตั้งปลั๊กอินที่ต้องการคือการเพิ่ม wrapper รอบ 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" "$@"

ฉันทำให้เวอร์ชันที่สมบูรณ์ยิ่งขึ้นของ wrapper นั้นที่นี่ ความแตกต่างเพียงอย่างเดียวกับเวอร์ชันที่ยาวกว่าคือช่วยให้มั่นใจได้ว่า wrapper นั้นถูกเรียกใช้ในฐานะ 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*) ในไฟล์ wrapper ตรวจสอบให้แน่ใจว่าบรรทัด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

ฉันมีปัญหาเดียวกันหลังจากฉันปรับปรุง certbot บน OS จินไม่สามารถรับปลั๊กอิน DigitalOcean pip install certbot-dns-digitaloceanปรากฏแม้หลังจากที่ติดตั้งใหม่ด้วย

วิธีแก้ไขคือถอนการติดตั้งแล้วติดตั้งใหม่ ฉันใช้ sudo เพื่อความปลอดภัย:

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

จากนั้นปรากฏว่าตกลงในcertbot pluginsรายการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.