技术教程 · 2019年10月15日 0

如何使用certbot管理Let’s Encrypt SSL / TLS证书

Let’s Encrypt是由Internet安全研究小组(ISRG)运营的自动开放证书颁发机构(CA),由电子前沿基金会(EFF),Mozilla基金会等建立。它提供免费的SSL / TLS证书,通常用于出于安全和隐私目的对通信进行加密,最著名的用例是HTTPS。让我们加密依靠ACME(自动证书管理环境)协议来发行,吊销和续订证书。Certbot是一个免费的开源实用程序,主要用于管理Let’s Encrypt的 SSL / TLS证书证书颁发机构。它可用于大多数UNIX和类似UNIX的操作系统,包括GNU / Linux,FreeBSD,OpenBSD和OSX。该指南将对certbot的使用提供与平台无关的介绍。

注意:由于certbot尚在开发中,因此本指南中描述的某些功能或行为可能在较早版本或将来的版本中有所不同。

要求

  • 一个注册的域名,带有A记录,指向您的IPv4地址。以“ www.example.com”为例。
  • 访问特权shell。

一般概念

操作模式

使用certbot启用HTTPS可以分为两个部分:身份验证和安装。第一个要求解决挑战并保存证书和其他文件。安装步骤涉及配置和保护Web服务器。Certbot可以使用run子命令自动执行这两种操作。该certonly安装子分别是用于验证和安装步骤。

Certbot还包括证书续订和吊销功能。

挑战性

获取“加密”证书涉及解决ACME(自动证书管理环境)服务器发出的域验证挑战。这项挑战将验证您对要为其获取证书的域的所有权。存在不同的质询类型,最常用的是HTTP-01。顾名思义,它使用HTTP协议。尽管可以将HTTP服务器配置为使用任何TCP端口,但由于安全措施,此挑战仅在端口80上有效。DNS-01是基于DNS解析的另一种不太受欢迎的挑战类型。请注意,无法通过HTTP-01挑战获得通配符证书。本指南最初将重点放在HTTP-01上

外挂程式

Certbot依靠插件来执行身份验证和安装。诸如webrootStandalone之类的插件仅执行身份验证,而诸如Apache和Nginx插件之类的插件则旨在自动获取和安装证书(即Web服务器配置)。其他插件包括几个用于DNS-01身份验证的特定于供应商的DNS插件。大多数certbot插件是单独安装的,但内置的webroot和独立插件除外。

安装Certbot

大多数Linux发行版在其官方存储库中提供certbot。以下是广泛使用的平台的安装说明。

Debian和Ubuntu:

apt update
apt install -y certbot

CentOS 7:

yum install -y certbot

Fedora和CentOS 8:

dnf install -y certbot

Arch Linux:

pacman -Sy certbot

FreeBSD:

pkg install py36-certbot

OpenBSD 6.0及更高版本:

pkg_add certbot

MacOS(需要自制软件):

brew install letsencrypt

其他:

如果您平台上没有certbot软件包,则可以使用官方的certbot-auto包装程序脚本在系统上自动安装certbot。可以在这里下载。

使用Certbot

上市证书

要显示服务器上certbot管理的证书的列表,请发出以下命令:

certbot certificates

获取手动配置证书

如果选择手动配置Web服务器,则可以通过两种方式来获取证书。通过授予certbot访问服务器的Web根目录(即webroot插件),或在端口80上部署临时的独立Web服务器(即独立插件)。在无法或不希望与现有Web服务器集成的情况下,后一个插件很有用。为方便起见和更简单的更新,请与使用的插件保持一致。

使用现有的Web服务器

要使用现有的Web服务器,请在执行以下命令之前确保其正在运行并在端口80上监听

certbot certonly --webroot

除其他信息外,系统将提示您输入域名和Webroot的路径,在大多数Linux系统上默认为/ var / www / html /。或者,您可以将所需信息指定为命令参数。例如:

certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m your_email@example.com -d www.example.com

使用独立的Web服务器

为了使用独立服务器,首先请确保端口80的可用性。您可以使用以下方法检查绑定到该端口的任何进程:

ss -lntp 'sport = 80'

如果需要,请在继续操作之前停止有问题的服务/过程。然后,发出命令:

certbot certonly --standalone

颁发证书后,您将需要手动配置Web服务器。相关文件可以在/ etc / letsencrypt / live / your_domain中找到

交互式HTTPS安装

如前所述,certbot可以自动化整个HTTPS设置过程,包括Web服务器配置。插件可用于Apache和Nginx,并且可能需要作为单独的软件包安装。安装特定于您的Web服务器的certbot插件,然后执行certbot run –PLUGIN_NAME。我们将在Debian 10系统上演示Apache的整个过程。Nginx的过程与此类似。

apt install -y python-certbot-apache
certbot run --apache

假设已经为您的域名配置了Web服务器,certbot将解析现有配置,并提示您选择应该为其激活HTTPS的域名。如果未配置您的Web服务器,或者certbot无法检测到您的域名,只需在出现提示时手动输入您的域名即可。例如:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Certbot将为新的HTTPS虚拟主机创建一个新的Apache配置文件,并询问是否将HTTP流量重定向到HTTPS。除非有充分的理由,否则应启用重定向到HTTPS。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://www.example.com
恭喜你!您已成功启用https://www.example.com

续订证书

手动续订

要使用certbot续订证书,可以使用renew子命令。在续订期间,certbot将使用与原始发行相同的插件和选项。证书仅在少于30天后才更新,因此可以根据需要频繁使用此子命令,因为如果证书不在其到期日期附近,则它将不执行任何操作。该命令很简单:

certbot renew

如果使用独立插件来颁发证书,则需要停止Web服务器以使续订成功。您可以使用钩子来实现。例如,如果系统运行Apache,则命令为:

certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"

自动续订

默认情况下,许多发行版都通过systemd计时器或cron作业启用了自动续订。您可以使用以下方法检查systemd计时器:

systemctl list-timers

对于cron作业,请使用:

ls /etc/cron*

如果使用webroot插件进行发行,则只要您的Web服务器正在运行,自动续订就应该成功。但是,使用独立插件时,如果Web服务器正在运行,则默认的自动续订命令将失败,因为certbot无法绑定到端口80。因此,需要如上所述添加钩子对其进行修改。

吊销证书

可以通过指定证书路径或名称来撤销证书:

certbot revoke --cert-name cert_name
(或者)
certbot revoke --cert-path /path/to/cert.pem

例如:

certbot revoke --cert-name www.example.net

运行revoke子命令后,certbot将询问是否应删除证书文件。如果您选择不删除它们,则在下一次续签时将续签已撤销的证书。可以将几个不言自明的选项传递给revoke子命令:

  • –delete-after-revoke(默认情况下提示用户选择)
  • –no-delete-after-revoke(默认情况下提示用户选择)
  • –reason [未指定,密钥折中,从属关系已更改,已取代,已终止操作](默认值:未指定)

通配符证书

可以使用单个通配符证书来标识多个子域,以替代单独的常规证书。要获得通配符证书,必须使用DNS-01质询。虽然有几种可以自动执行ACME身份验证过程的特定于供应商的插件,但我们将说明手动的,与供应商无关的过程。需要访问您的域的名称服务器。

使用以下命令来请求通配符证书:

certbot certonly --manual --preferred-challenges dns-01 -d *.example.net

Certbot将显示一个值,该值应部署在DNS TXT记录中。该TXT记录用作必要的所有权验证。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.net with the following value:
y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

在继续操作之前,您需要在DNS控制面板中创建指定的记录。创建记录后,请等待几分钟,然后再按Enter键,这将触发ACME服务器对其进行验证。在某些情况下,可能需要更长的等待时间才能使新记录正确传播并可以访问。成功后,证书,链和私钥将保存在/etc/letsencrypt/live/example.com/

参考和其他信息