介绍
让我们加密是一个开放和自动化的认证机构,它使用ACME(自动证书管理环境)协议向任何兼容的客户端提供免费的TLS / SSL证书。 这些证书可用于加密您的Web服务器和用户之间的通信。 有数十种可用的客户端,以各种编程语言编写,以及许多与流行的管理工具,服务和服务器的集成。
最流行的ACME客户Certbot现在由电子前沿基金会开发 。 除了验证域所有权和获取证书之外,Certbot还可以自动在Apache和Nginx Web服务器上配置TLS / SSL。
本教程将简要讨论证书颁发机构以及让我们如何加密,然后查看一些流行的ACME客户端。
什么是认证机构?
证书颁发机构(CA)是加密地签署TLS / SSL证书以证实其真实性的实体。 浏览器和操作系统具有用于验证站点证书的可信CA的列表。
直到最近,大多数CA是商业运营,为其验证和签名服务收取了费用。 让我们加密已经通过完全自动化程序,以及依靠赞助和捐款资助必要的基础设施,为用户免费提供了这一过程。
有关证书和不同类型的证书颁发机构的更多信息,您可以阅读“ 加密,商业和私有证书颁发机构的比较以及自签名SSL证书” 。
接下来,我们将看看让我们如何进行自动化域验证。
如何加密工程
让我们加密的ACME协议定义了客户端与其服务器通信以请求证书,验证域所有权和下载证书的方式。 目前正在成为IETF官方标准。
让我们加密提供域验证的证书,这意味着他们必须检查证书请求是来自实际控制域的人员。 他们通过向客户端发送唯一的令牌,然后进行Web或DNS请求来检索从该令牌导出的密钥。
例如,对于基于HTTP的挑战,客户端将从唯一令牌和帐户令牌计算密钥,然后将结果放在要由Web服务器提供的文件中。 让我们加密服务器然后检索http:// example.com /.well-known/acme-challenge/ token
的文件。 如果密钥正确,客户端已经证明它可以控制example.com
资源,并且服务器将签名并返回证书。
ACME协议定义了客户端可以用来证明域名所有权的多种挑战。 HTTPS挑战与HTTP类似,除了文本文件外,客户端将提供包含密钥的自签名证书。 DNS挑战寻找DNS TXT记录中的关键。
Certbot让我们加密客户端
Certbot是迄今为止最受欢迎的让我们加密客户端。 它包含在大多数主要的Linux发行版中,并且包括Apache和Nginx的方便的自动配置功能。 一旦安装,获取证书和更新Apache配置就可以这样完成:
sudo certbot --apache -d www.example.com
Certbot会询问几个问题,运行挑战,下载证书,更新Apache配置并重新加载服务器。 然后,您可以使用网络浏览器导航到https:// www.example.com
。 将出现绿色锁定,指示证书有效,并且连接已加密。
因为加密证书只能在九十天内有效,因此设置自动续订过程非常重要。 以下命令将更新计算机上的所有证书:
sudo certbot renew
将上述命令放在crontab中,每天运行,证书将在其到期前三十天自动更新。 如果最初使用--apache
或--nginx
选项创建证书,Certbot将在成功更新后重新加载服务器。
如果您想了解更多关于cron和crontabs的信息,请参考“ 如何使用Cron自动化任务 ”教程。
其他客户
因为ACME协议是开放的,而且文档很好,所以已经开发了许多备用客户端。 让我们加密在他们的网站上维护一个ACME客户端列表 。 大多数其他客户端没有Certbot的自动Web服务器配置功能,但它们具有可能吸引您的其他功能:
- 大多数编程语言都有一个客户端,包括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提供程序交互
- 凯迪 :凯迪是一款完整的网络服务器,内置支持让我们加入。
更多的客户端可用,许多其他服务器和服务通过集成我们的加密支持来自动化TLS / SSL设置。
结论
我们已经介绍了让我们加密如何工作的基础知识,并讨论了一些可用的客户端软件。 如果您想要使用Let's Encrypt with各种软件的更详细的说明,以下教程是开始的好地方: