如何在CentOS7上使用CloudFlare验证检索Let'sEncryptSSL通配符证书
作为 Write for DOnations 计划的一部分,作者选择了 Code.org 来接受捐赠。
介绍
Let's Encrypt 是一个证书颁发机构 (CA),为 传输层安全 (TLS) 加密 提供免费证书。 它提供了一个名为 Certbot 的软件客户端,它简化了证书创建、验证、签名、安装和更新的过程。
Let's Encrypt 现在支持 通配符证书 ,它允许您使用单个证书保护域的所有子域。 如果您想使用单个服务器托管多个服务,例如 Web 界面、API 和其他站点,这将非常有用。
要从 Let's Encrypt 获取通配符证书,您必须使用 Certbot 的 DNS 插件 之一,其中包括:
- certbot-dns-cloudflare
- certbot-dns-route53
- certbot-dns-google
- certbot-dns-digitalocean
您选择的插件取决于托管您的 DNS 记录的服务。 在本教程中,您将使用 CentOS 7 上的 Certbot 验证 CloudFlare 为您的域获取通配符证书。 然后,您将配置证书以在到期时对其进行续订。
先决条件
要完成本教程,您需要以下内容:
- 按照CentOS 7初始服务器设置指南设置一台CentOS 7服务器,包括sudo非root用户和防火墙。
- 完全注册的域名。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。
- 一个 Cloudflare 帐户。
- 在 Cloudflare 的 DNS 中为您的域设置的 DNS 记录,以及配置的几个子域。 您可以按照 CloudFlare 的设置网站 的教程进行配置。
第 1 步 — 安装 Certbot
默认情况下,certbot
包不能通过 CentOS 的包管理器获得。 您需要启用 EPEL 存储库来安装 Certbot 及其插件。
要添加 CentOS 7 EPEL 存储库,请运行以下命令:
sudo yum install -y epel-release
安装完成后,您可以安装 certbot
:
sudo yum install -y certbot
然后为 Certbot 安装 CloudFlare 插件:
sudo yum install -y python2-cloudflare python2-certbot-dns-cloudflare
如果您使用的是其他 DNS 服务,您可以使用 yum search
命令找到对应的插件:
yum search python2-certbot-dns
您已准备好服务器以获取证书。 现在您需要从 CloudFlare 获取 API 密钥。
第 2 步 — 获取 CloudFlare API
为了让 Certbot 自动更新通配符证书,您需要向它提供您的 CloudFlare 登录名和 API 密钥。
登录您的 Cloudflare 帐户并导航到 个人资料页面 。
单击 Global API Key 行中的 View 按钮。
出于安全原因,您将被要求重新输入您的 Cloudflare 帐户密码。 输入它并验证验证码。 然后再次单击查看按钮。 您将看到您的 API 密钥:
复制此密钥。 您将在下一步中使用它。
现在返回您的服务器以继续获取证书的过程。
第 3 步 — 配置 Certbot
您拥有告诉 Certbot 如何使用 Cloudflare 的所有必要信息,但让我们将其写入配置文件,以便 Сertbot 可以自动使用它。
首先运行不带任何参数的certbot
命令创建初始配置文件:
sudo certbot
接下来在 /etc/letsencrypt
目录中创建一个配置文件,其中将包含您的 CloudFlare 电子邮件和 API 密钥:
sudo vi /etc/letsencrypt/cloudflareapi.cfg
将以下内容添加到其中,将占位符替换为您的 Cloudflare 登录名和 API 密钥:
/etc/letsencrypt/cloudflareapi.cfg
dns_cloudflare_email = your_cloudflare_login dns_cloudflare_api_key = your_cloudflare_api_key
保存文件并退出编辑器。 使用 Cloudflare 的 API 密钥,您可以从命令行执行与从 Cloudflare UI 执行的操作相同的操作,因此为了保护您的帐户,请使配置文件只能由其所有者读取,这样其他人就无法获得您的密钥:
sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg
配置文件到位后,让我们获取证书。
第 4 步 — 获取证书
要获得证书,我们将使用 certbot
命令并指定我们想要的插件、我们想要使用的凭证文件以及我们应该用来处理请求的服务器。 默认情况下,Certbot 使用 Let's Encrypt 的生产服务器,使用 ACME API 版本 1,但 Certbot 使用另一种协议来获取通配符证书,因此您需要提供 ACME v2 端点。
运行以下命令以获取您的域的通配符证书:
sudo certbot certonly --cert-name your_domain --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.your_domain" -d your_domain
您将被要求指定应接收紧急续订和安全通知的电子邮件地址:
Output... Plugins selected: Authenticator dns-cloudflare, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): your email
然后您将被要求同意服务条款:
Output------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: A
然后,您将被要求与电子前沿基金会分享您的电子邮件地址:
Output------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: N
然后 Certbot 将获取您的证书。 您将看到以下消息:
OutputIMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2018-07-31. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
现在您有了通配符证书。 让我们看看 Certbot 为您下载了什么。 使用 ls
命令查看保存您的密钥和证书的目录的内容:
sudo ls /etc/letsencrypt/live/your_domain
Outputcert.pem chain.pem fullchain.pem privkey.pem README
README
文件包含有关这些文件的信息:
$ cat /etc/letsencrypt/live/your_domain/README
你会看到这样的输出:
自述文件
This directory contains your keys and certificates. `privkey.pem` : the private key for your certificate. `fullchain.pem`: the certificate file used in most server software. `chain.pem` : used for OCSP stapling in Nginx >=1.3.7. `cert.pem` : will break many server configurations, and should not be used without reading further documentation (see link below). We recommend not moving these files. For more information, see the Certbot User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.
从这里,您可以使用通配符证书配置您的服务器。 您通常只需要其中两个文件:fullchain.pem
和 privkey.pem
。
例如,您可以配置几个基于 Web 的服务:
- www.example.com
- api.example.com
- mail.example.com
为此,您需要一个 Web 服务器,例如 Apache 或 Nginx。 这些服务器的安装和配置超出了本教程的范围,但以下指南将引导您完成配置服务器和应用证书的所有必要步骤。
对于 Nginx,请查看以下教程:
对于 Apache,请参阅以下教程:
现在让我们看看自动更新证书。
第 5 步 — 更新证书
Let's Encrypt 颁发有效期为 90 天的短期证书。 我们需要设置一个 cron 任务来检查过期证书并自动更新它们。
让我们创建一个 cron 任务,它将每天运行更新检查。
使用以下命令打开crontab
文件进行编辑:
sudo crontab -e
将以下行添加到文件中以尝试每天更新证书:
crontab
30 2 * * * certbot renew --noninteractive
30 2 * * *
表示“每天凌晨 2:30 运行以下命令”。certbot renew
命令将检查系统上安装的所有证书,并更新任何设置为在 30 天内到期的证书。--noninteractive
告诉 Certbot 不要等待用户输入。
更新证书后,您需要重新加载 Web 服务器。 renew
命令包含用于在证书更新之前或之后运行命令或脚本的挂钩。 您还可以在域的续订配置文件中配置这些挂钩。
例如,要重新加载 Nginx 服务器,请打开更新配置文件:
sudo vi /etc/letsencrypt/renewal/your_domain.conf
然后在 [renewalparams]
部分下添加以下行:
/etc/letsencrypt/renewal/<^>your_domain<^>.conf
renew_hook = systemctl reload nginx
现在 Certbot 将在安装更新的证书后自动重新启动您的 Web 服务器。
结论
在本教程中,您已安装 Certbot 客户端、使用 DNS 验证获取通配符证书并启用自动续订。 这将允许您将单个证书与您的域的多个子域一起使用并保护您的 Web 服务。