介绍
Let’s Encrypt 是一个证书颁发机构 (CA),它提供了一种简单的方法来获取和安装免费的TLS/SSL 证书,从而在 Web 服务器上启用加密的 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动执行大部分(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在 Apache 和 Nginx 上都是完全自动化的。
在本教程中,您将使用 Certbot 在 Ubuntu 18.04 上为 Apache 获取免费 SSL 证书,并将您的证书设置为自动续订。
本教程将使用单独的 Apache 虚拟主机文件而不是默认配置文件。我们建议为每个域创建新的 Apache 虚拟主机文件,因为这有助于避免常见错误并将默认文件保留为后备配置。
先决条件
要学习本教程,您需要:
-
按照Ubuntu 18.04教程的初始服务器设置设置一个 Ubuntu 18.04 服务器,包括 sudo 非 root 用户和防火墙。
-
完全注册的域名。本教程将始终使用your_domain作为示例。你可以购买一个域名Namecheap,免费获得一个在Freenom,或使用你选择的域名注册商。
-
为您的服务器设置的以下两个 DNS 记录。您可以按照DigitalOcean DNS的介绍了解有关如何添加它们的详细信息。
your_domain
指向您服务器的公共 IP 地址的 A 记录。- 指向您服务器的公共 IP 地址的 A 记录。
www.your_domain
-
按照如何在 Ubuntu 18.04 上安装 Apache 安装 Apache。确保您的域有一个虚拟主机文件。本教程将用作示例。
/etc/apache2/sites-available/your_domain.conf
步骤 1 — 安装 Certbot
使用 Let’s Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。
Certbot 处于非常活跃的开发阶段,因此 Ubuntu 提供的 Certbot 包往往已经过时。但是,Certbot 开发人员维护一个具有最新版本的 Ubuntu 软件存储库,因此我们将改用该存储库。
首先,添加存储库:
- sudo add-apt-repository ppa:certbot/certbot
你需要按ENTER
接受。
使用以下命令安装 Certbot 的 Apache 包apt
:
- sudo apt install python-certbot-apache
Certbot 现在可以使用了,但是为了让它为 Apache 配置 SSL,我们需要验证 Apache 的一些配置。
步骤 2 — 设置 SSL 证书
Certbot 需要能够在您的 Apache 配置中找到正确的虚拟主机,以便它自动配置 SSL。具体来说,它通过查找ServerName
与您为其申请证书的域匹配的指令来实现这一点。
如果您按照Apache 安装教程中的虚拟主机设置步骤进行操作,则您的域中应该有一个 VirtualHost 块,并且已正确设置了指令。/etc/apache2/sites-available/your_domain.com.conf
ServerName
要检查,请使用nano
或您喜欢的文本编辑器打开您的域的虚拟主机文件:
- sudo nano /etc/apache2/sites-available/your_domain.conf
找到现有的ServerName
行。它应该是这样的:
...
ServerName your_domain;
...
如果是,请退出编辑器并继续下一步。
如果不是,请更新它以匹配。然后保存文件,退出编辑器,并验证配置编辑的语法:
- sudo apache2ctl configtest
如果出现错误,请重新打开虚拟主机文件并检查是否有任何拼写错误或缺失字符。配置文件的语法正确后,重新加载 Apache 以加载新配置:
- sudo systemctl reload apache2
Certbot 现在可以找到正确的 VirtualHost 块并更新它。
接下来,让我们更新防火墙以允许 HTTPS 流量。
步骤 3 — 允许 HTTPS 通过防火墙
如果您ufw
按照先决条件指南的建议启用了防火墙,则需要调整设置以允许 HTTPS 流量。幸运的是,Apacheufw
在安装时注册了一些配置文件。
您可以通过键入以下内容查看当前设置:
- sudo ufw status
它可能看起来像这样,这意味着 Web 服务器只允许 HTTP 流量:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
要额外允许 HTTPS 流量,请允许 Apache 完整配置文件并删除冗余 Apache 配置文件限额:
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
您的状态现在应如下所示:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
接下来,让我们运行 Certbot 并获取我们的证书。
第 4 步 – 获取 SSL 证书
Certbot 提供了多种通过插件获取 SSL 证书的方式。Apache 插件将负责重新配置 Apache 并在必要时重新加载配置。要使用此插件,请键入以下内容:
- sudo certbot --apache -d your_domain -d www.your_domain
这certbot
与--apache
插件一起运行,-d
用于指定您希望证书有效的名称。
如果这是您第一次运行certbot
,系统会提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot
将与 Let’s Encrypt 服务器通信,然后运行质询以验证您是否控制要为其申请证书的域。
如果成功,certbot
会询问您希望如何配置 HTTPS 设置:
OutputPlease 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):
选择您的选择,然后点击ENTER
。配置将被更新,Apache 将重新加载以获取新设置。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-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. 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
您的证书已下载、安装和加载。尝试使用重新加载您的网站https://
并注意浏览器的安全指示器。它应该表明该站点已正确保护,通常带有绿色锁图标。如果您使用SSL Labs Server Test测试您的服务器,它将获得A级。
让我们通过测试更新过程来结束。
步骤 5 — 验证 Certbot 自动续订
certbot
我们安装的包通过包含一个更新脚本来处理更新/etc/cron.d
,该脚本由systemctl
名为的服务管理certbot.timer
。此脚本每天运行两次,并将自动更新任何在到期后三十天内的证书。
要检查此服务的状态并确保它处于活动状态并正在运行,您可以使用:
- sudo systemctl status certbot.timer
你会得到类似这样的输出:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
Triggers: ● certbot.service
Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.
要测试更新过程,您可以使用以下命令进行试运行certbot
:
- sudo certbot renew --dry-run
如果您没有看到任何错误,则说明一切就绪。必要时,Certbot 将更新您的证书并重新加载 Apache 以获取更改。如果自动续订过程失败,Let’s Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将到期时向您发出警告。
结论
在本教程中,您安装了 Let’s Encrypt 客户端certbot
,为您的域下载了 SSL 证书,将 Apache 配置为使用这些证书,并设置了自动证书续订。如果您对使用 Certbot 有其他疑问,可以从他们的文档开始。