介绍
Let’s Encrypt是一个开放且自动化的证书颁发机构,它使用ACME(自动证书管理环境)协议向任何兼容的客户端提供免费的TLS/SSL证书。这些证书可用于加密您的Web服务器与用户之间的通信。有许多可用的客户端,使用不同的编程语言编写,并且与流行的管理工具、服务和服务器有许多集成。
最受欢迎的ACME客户端,Certbot,现在由电子前哨基金会开发。除了验证域所有权并获取证书外,Certbot还可以自动配置Apache和Nginx Web服务器上的TLS/SSL。
本教程将简要讨论证书颁发机构以及Let’s Encrypt的工作原理,然后审查一些流行的ACME客户端。
什么是证书颁发机构?
证书颁发机构(CAs)是以加密方式签署TLS/SSL证书以确保其真实性的实体。浏览器和操作系统具有一系列可信任的CA列表,用于验证站点证书。
直到最近,大多数CA都是商业运营机构,为其验证和签署服务收取费用。Let’s Encrypt通过完全自动化程序并依赖赞助和捐赠来资助必要的基础设施,使此过程对用户免费。
有关证书及不同类型的证书颁发机构的更多信息,请阅读“比较Let’s Encrypt、商业和私人证书颁发机构以及自签名SSL证书”。
接下来,我们将看看Let’s Encrypt如何进行自动域验证。
Let’s Encrypt工作原理
Let’s Encrypt的ACME协议定义了客户端与其服务器通信以请求证书、验证域所有权和下载证书的方式。它目前正在成为官方IETF标准的过程中。
Let’s Encrypt提供域验证证书,这意味着他们必须检查证书请求来自实际控制该域的人。他们通过向客户端发送一个唯一令牌,然后发出web或DNS请求以检索从该令牌派生的密钥来实现这一点。
例如,使用基于HTTP的挑战,客户端将从唯一令牌和账户令牌计算密钥,然后将结果放入由web服务器提供的文件中。然后Let’s Encrypt服务器会在http://example.com/.well-known/acme-challenge/token
处检索文件。如果密钥正确,客户端已经证明可以控制example.com
上的资源,服务器将签署并返回证书。
ACME协议定义了多种挑战,您的客户端可以使用这些挑战来证明域所有权。HTTPS挑战类似于HTTP,只是客户端将提供一个包含密钥的自签名证书。DNS挑战在DNS TXT记录中查找密钥。
Certbot Let’s Encrypt客户端
Certbot是目前最受欢迎的Let’s Encrypt客户端。它包含在大多数主要的Linux发行版中,并且包括方便的自动配置功能,适用于Apache和Nginx。安装后,获取证书并更新Apache配置可以像这样完成:
Certbot将询问一些问题,运行挑战,下载证书,更新您的Apache配置,并重新加载服务器。然后,您应该能够使用您的网络浏览器导航至https://www.example.com
。一个绿色的锁将会出现,表示证书是有效的,连接是加密的。
因为Let’s Encrypt证书只有效期为九十天,所以建立一个自动更新流程非常重要。以下命令将在一台机器上续订所有证书:
将上述命令放入crontab中,每天运行一次,证书将在到期前三十天自动更新。如果证书最初是使用--apache
或--nginx
选项创建的,Certbot将在成功续订后重新加载服务器。
如果您想了解有关cron和crontabs的更多信息,请参阅教程“如何使用Cron自动化任务”。
其他客户端
由于ACME协议是开放且有文档记录的,因此已开发了许多其他客户端。Let’s Encrypt在其网站上维护了一个ACME客户端列表。大多数其他客户端没有Certbot的自动网络服务器配置功能,但它们具有您可能感兴趣的其他功能:
- 几乎每种编程语言都有一个客户端,包括Shell脚本、Go和Node.js。如果在受限环境中创建证书时不想包含Python和其他Certbot依赖项,这可能很重要
- 一些客户端可以在没有root权限的情况下运行。通常最好尽可能少地运行特权代码
- 许多客户端可以通过使用您的DNS提供商的API自动创建适当的TXT记录来自动执行基于DNS的挑战。DNS挑战可以实现一些更复杂的用例,例如加密不公开访问的Web服务器。
- 一些客户端实际上已经集成到Web服务器、反向代理或负载均衡器中,这样配置和部署就更加容易了
一些较受欢迎的客户端包括:
- lego:用Go编写,lego是一个单文件二进制安装程序,支持许多DNS提供商使用DNS挑战
- acme.sh:acme.sh是一个简单的Shell脚本,可以在非特权模式下运行,并与30多个DNS提供商交互
- Caddy:Caddy是一个用Go编写的完整Web服务器,内置支持Let’s Encrypt。
还有许多其他客户端可用,许多其他服务器和服务也通过集成Let’s Encrypt支持来自动化TLS/SSL设置。
结论
我们已经讨论了Let’s Encrypt的基本工作原理,并讨论了一些可用的客户端软件。如果您想获取有关如何在各种软件上使用Let’s Encrypt的更详细说明,请参考以下教程:
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-let-s-encrypt