作者选择Code.org作为Write for DOnations计划的一部分进行捐赠。
介绍
我们的加密是一个证书颁发机构(CA),它为传输层安全性(TLS)加密提供免费证书。 它提供了一个名为Certbot的软件客户端,它简化了证书创建,验证,签名,安装和续订的过程。
我们的加密现在支持通配符证书 ,允许您使用单个证书保护域的所有子域。 如果要使用单个服务器托管多个服务(例如Web界面,API和其他站点),这将非常有用。
要从Let's Encrypt获取通配符证书,您必须使用Certbot的DNS插件之一 ,其中包括:
- certbot-DNS-的CloudFlare
- certbot-DNS-route53
- certbot-DNS-谷歌
- certbot-DNS-digitalocean
您选择的插件取决于您的DNS记录所在的服务。 在本教程中,您将使用CentOS 7上的Certbot进行CloudFlare验证,为您的域获取通配符证书。然后,您将配置证书以在其到期时续订。
先决条件
要完成本教程,您需要以下内容:
- 一个CentOS 7服务器按照CentOS 7初始服务器设置指南设置 ,包括sudo非root用户和防火墙。
- 完全注册的域名。 您可以在Namecheap上购买域名,在Freenom上免费获取一个域名,或使用您选择的域名注册商。
- Cloudflare帐户。
- 在Cloudflare的DNS中为您的域设置的DNS记录,以及配置的几个子域。 您可以按照CloudFlare关于设置网站的教程进行配置。
第1步 - 安装Certbot
默认情况下,CentOS的软件包管理器不提供certbot
软件包。 您需要启用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帐户密码。 输入它并验证CAPTCHA。 然后再次单击“ 查看”按钮。 你会看到你的API密钥:
复制此密钥。 您将在下一步中使用它。
现在返回到您的服务器以继续获取证书的过程。
第3步 - 配置Certbot
您拥有告诉Certbot如何使用Cloudflare的所有必要信息,但是让我们将其写入配置文件,以便Сertbot可以自动使用它。
首先运行不带任何参数的certbot
命令来创建初始配置文件:
sudo certbot
接下来在/etc/letsencrypt
目录中创建一个配置文件,其中包含您的CloudFlare电子邮件和API密钥:
sudo vi /etc/letsencrypt/cloudflareapi.cfg
将以下内容添加到其中,使用Cloudflare登录和API密钥替换占位符:
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的服务:
- WWWW。 example.com
- API。 example.com
- 邮件。 example.com
为此,您需要一个Web服务器,例如Apache或Nginx。 这些服务器的安装和配置超出了本教程的范围,但以下指南将指导您完成配置服务器和应用证书的所有必要步骤。
对于Nginx,请看一下这些教程:
对于Apache,请参阅以下教程:
现在让我们看看自动续订证书。
第5步 - 续订证书
让我们加密发布有效期为90天的短期证书。 我们需要设置一个cron任务来检查即将到期的证书并自动更新它们。
让我们创建一个cron任务
这将每天进行续订检查。
使用以下命令打开crontab
文件以进行编辑:
sudo crontab -e
将以下行添加到文件中以尝试每天续订证书:
30 2 * * * certbot renew --noninteractive
-
30 2 * * *
表示“每天凌晨2:30运行以下命令”。 -
certbot renew
命令将检查系统上安装的所有证书,并在不到30天的时间内更新任何设置为过期的证书。 -
--noninteractive
告诉Certbot不要等待用户输入。
更新证书后,您需要重新加载Web服务器。 renew
命令包括在renew
证书之前或之后运行命令或脚本的挂钩。 您还可以在域的续订配置文件中配置这些挂钩。
例如,要重新加载Nginx服务器,请打开续订配置文件:
sudo vi /etc/letsencrypt/renewal/your_domain.conf
然后在[renewalparams]
部分下添加以下行:
renew_hook = systemctl reload nginx
现在,Certbot将在安装更新的证书后自动重启您的Web服务器。
结论
在本教程中,您已安装了Certbot客户端,使用DNS验证获取了通配符证书并启用了自动续订。 这将允许您使用包含域的多个子域的单个证书并保护您的Web服务。