Let’s Encrypt是如何工作的

翻译 2018年04月15日 00:14:31

第一次写博客,最近工作需要了解免费证书申请,所以翻译了一下官网资料,不通顺之处,大家海涵!

Let's Encrypt是一个CA,官网介绍了其详细工作原理,我按照自己的理解复述一下:

通过为https://example.com/设置证书管理代理这个过程(该代理需支持Let's Encrypt),我们可以了解Let's Encrypt是如何工作的。

这个过程分两步:首先,代理向CA证明web服务器拥有域控制权(域认证);其后,代理可以为该域请求,更新,撤销证书(证书发放与撤销)。

域认证

Let’s Encrypt(后面简写CA)通过公钥来标识服务器管理员。代理在第一次与Let’s Encrypt通信的时候,会产生一个秘钥对(公钥与私钥),并且向CA证明服务器拥有一个或多个域,这类似于传统的CA认证过程:创建一个账号,并为该账号加入域。

为了开始这个流程,代理会询问CA为了证明自己拥有example.com域需要做些什么。CA会查看代理请求的域名并发出一组或多组challenges(可以理解是CA给代理下发的任务,后续CA通过验证该任务的完成情况来证明代理拥有域控制权)。代理有多重不同的方式来证明拥有域的控制权。例如:CA可以给代理下面两种选择:

1)配置一个从属于域example.comDNS记录     (参见Certbot, Challenge Type:dns-01)

2)  在https://example.com/上的一个众所周知的URI上配置一个http资源 (参见Certbot, Challenge Type:http-01)

伴随着challenges,CA还会提供一个随机数(这个随机数只会被使用一次),代理必须用它的私钥为这个随机数签名,用来证明代理拥有这个秘钥对的控制权。(下图,put ed98 at https://example.com/8303代表一个challenge,意思是让代理将ed98写入https://example.com/8303指向的文件资源。

Requesting challenges to validate example.com

代理软件完成了一组CA提供的challenges。在这里我们假设代理完成是CA提供的第二种选择(Challenge Type:http-01:在http://example.co/站点的一个指定的路径下(8303)创建一个文件(写入ed98)。同时代理用自己的私钥为CA提供的随机数签名。一旦代理完成这些步骤,就会通知CA它已经准备等待验证完成。

然后,CA的工作是核实那些challenges是否被满足。CA会验证随机数的签名(CA收到代理发送过来的签名以及公钥A,用公钥A对签名解密,得到数字摘要,和随机数生成的摘要做对比,一致则证明这个签名是代理的签名。),并且会尝试从web服务器下载文件(https://example.com/8303),并确认文件内容是所期望的内容(ed98)。

Requesting authorization to act for example.com

如果随机数的签名是合法的,并且challenges检查合格。被公钥标识的代理被授权为域example.com管理证书。我们称代理使用的密钥对 为example.com的已授权密钥对。

证书发放与撤销

一旦代理有了已授权秘钥对,请求,更新,撤销证书就很简单了,只需要发送证书管理消息,并用授权秘钥对他们签名就可以了。

为了获取域证书,代理构建一个PKCS#10证书签名请求(CSR)给CA,请求CA使用指定的公钥来发放域example.com证书。通常,CSR中包含了一个在CSR中的公钥关联的私钥加密的签名。代理会用example.com的已授权秘钥为整个CSR签名,以便让CA知道自己是被授权的。

当CA接收到请求,会验证两个签名。如果两个签名都是正常的,CA会为example.com发放证书以及CSR中的公钥,一并返回给代理。

Requesting a certificate for example.com


注:该篇翻译了代理与LE交互的部分过程。LE使用ACME协议来完成域认证和证书发放,客户端代理必须使用ACME协议与LE通信。

实现ACME协议的客户端有很多,LE官网推荐使用Certbot,具体使用可参见Certbot官网。

challenges可参见certbot说明,一般有http-01,dns-01,tls-sni-01这三种。



如何高效的学习和工作(撸码)

本课程主要讲解与分享一些如何高效的学习IT技能的方法,如何高效的进行IT工作,以及在学习、工作中如何提升与总结自己的技能的学习方式与方法。
  • 2016年10月27日 16:57

windows申请免费SSL证书-Let's Encrypt

拷贝文字:Let's Encrypt 项目是由互联网安全研究小组ISRG,Internet Security Research Group主导并开发的一个新型数字证书认证机构CA,Certificat...
  • i348018533
  • i348018533
  • 2016-03-03 17:46:58
  • 15233

IIS 超简单部署免费https Let's Encrypt

下载 letsencrypt-win-simple.v1.9.7.0-beta2 解压 letsencrypt-win-simple 文件夹,然后点击文件夹,按住shift,再点击右键,选择在此...
  • chen46311973
  • chen46311973
  • 2017-10-11 15:24:02
  • 1487

Windows服务器上完成Let’s Encrypt免费SSL证书的自动化更新部署(apache)

首先,如果不了解SSL证书推荐看这篇文章http://www.cnblogs.com/guogangj/p/4118605.html Let’s Encrypt是一家致力于推动网站SSL加密普...
  • lichenzero
  • lichenzero
  • 2017-07-18 13:54:37
  • 3448

免费HTTPS证书Let's Encrypt安装教程

        使用 Let's Encrypt申请证书不尽免费、代码开源,而且配置简单,不过每次申请只有90天的有效期,但可以通过脚本定期更新,配置好之后一劳永逸。本教程亲测有效,希望对正在寻找免费...
  • u011398163
  • u011398163
  • 2018-03-26 00:48:29
  • 152

Let's Encrypt 申请通配符证书(使用DnsPod解析的域名操作)

大家觊觎已久的通配符域名,终于在2018年3月14日正式接受申请了。通配符证书可是很贵的,至于有什么用途,你都看到本文了就不需要解释了吧。CA厂商这回可是要大洗牌了,剧透一下,证书仍然是3个月的哦!博...
  • wr410
  • wr410
  • 2018-03-14 21:39:44
  • 635

Let's Encrypt实现

之前忘了说了,我这个方法只对Tomcat7.0以上有用(要不然就是8.0...) 我自己用的是9.0 原因好像是因为7.0(还是8.0)才新增的对证书配置方法的支持,也就是这里: 7.0以下这一步应...
  • qq_32447301
  • qq_32447301
  • 2017-12-07 14:14:06
  • 442

Let’s Encrypt是如何工作的

第一次写博客,最近工作需要了解免费证书申请,所以翻译了一下官网资料,不通顺之处,大家海涵!Let's Encrypt是一个CA,官网介绍了其详细工作原理,我按照自己的理解复述一下:通过为https:/...
  • canghaiguzhou
  • canghaiguzhou
  • 2018-04-15 00:14:31
  • 59

如何在Ubuntu 14.04中利用Let's Encrypt保障Nginx安全

提供:ZStack云计算 内容介绍Let’s Encrypt是一套新型证书管理器(简称CA),能够轻松帮助用户获取并安装免费TLS/SSL证书,并借此在Web服务器上实现HTTPS加密。其提供一套软件...
  • zstack_org
  • zstack_org
  • 2016-12-26 10:02:57
  • 1812

Let's Encrypt 给网站加 HTTPS 完全指南

使用 HTTPS 前的一些疑惑 现在是 2016 年,使用 HTTPS 已经不像几年前是一件昂贵的事情。当然我也是自己了解了一圈才消除了自己的疑惑,主要是: 我的网站(一个简单的博客)可能没必...
  • andylau00j
  • andylau00j
  • 2017-01-18 19:26:22
  • 1147
收藏助手
不良信息举报
您举报文章:Let’s Encrypt是如何工作的
举报原因:
原因补充:

(最多只允许输入30个字)