Let’s Encrypt Challenge and acme.sh Issue Mode

Basic

dns

cname: 将域名指向另外一个域名;
txt:存储一个512长度内的文本,通常作SPF记录(Sender Policy Framework 反垃圾邮件);
ns:将子域名指定其他的DNS服务器解析;

dig

linux dig 命令使用方法

Let’s Encrypt

Let’s Encrypt 是免费、开放和自动化的证书颁发机构。由非盈利组织互联网安全研究小组(ISRG)运营。

从 Let’s Encrypt 请求证书,Let’s Encrypt Server 主要的工作就要验证你是否有此域名的控制权;这个验证的过程在 Let’s Encrypt 官方的说法是 challenge 。

challenge

验证的原理根手机号验证码的原理是一样的
手机号验证的目的是证明你有这个手机号的控制权;
acme.sh challenge的目的是验证你是否有这个域名的控制权;

以dns-01 类型的挑战为例:
如果你想域名一个证书,请求acme server 给你一个验证码(TXT value),把这个字符串设置到域名解析里面,acme server 请求这个域名解析,请求到了,就说明这个域名是你的控制权。

HTTP-01 Challenge

如果你可以控制这个域名所指向的网站里的内容,那么就 Let’s Encrypt Server 就认为你有这个域名的控制权;

DNS-01 Challenge

如果你可以控制这个域名的 DNS 解析,那么 Let’s Encrypt Server 就认为你有这个域名的控制权

TLS-ALPN-01

基于ALPN扩展的方案,可以暂时忽略。

acme.sh

acme.sh 是 Let’s Encrypt Server 的一个客户端脚本程序。
acme.sh 提供了8种方式,对应 Let’s Encrypt 提供的三种 Challenge 类型。

HTTP-01 Challenge 的实现方式比较好理解,对应 TLS-ALPN-01的方式暂时忽略。下面我们说下acme.sh 提供的 DNS 的三种模式,DNS-manual-mode ,DNS API mode和 DNS alias mode。

DNS-manual-mode

DNS-manual-mode的原理:

  1. 请求acme server 给一个txt value
  2. 将此txt value 添加到域名对应的解析
  3. 请求acme server 验证,如果找到了这个解析,则证明这个解析是你添加的,你拥有这个域名的控制权

DNS API mode
如果你使用的是DNS Provider 是大厂的服务,这些大厂一般都提供了http接口来操作dns解析,比如添加一个解析,删除一个解析等等;
这时候 acme.sh 就可以使用这些api来自动将amce server 返回的txt value 添加到dns 解析了,上面的第二步就可以去掉了;

去掉第二步之后,使用acme.sh请求证书的整个流程就成了自动化的了;

DNS alias mode

如果使用上面的dns api的方法,可以看到,dns解析的整个控制权都交给了acme.sh ;
如果不想这么作,acme提供了alias模式,可以使用一个不太重要的域名
基本原理是配置一个CNAME

_acme-challenge.importantDomain.com  
   =>   _acme-challenge.aliasDomainForValidationOnly.com

然后

acme.sh --issue  \
  -d  importantDomain.com --challenge-alias aliasDomainForValidationOnly.com --dns dns_cf

对于aliasDomainForValidationOnly.com域名,是DNS-manual-mode还是DNS-manual-mode#api都可以;

举个例子
DNS-manual-mode#api 模式,dns提供商为,acme-dns ,需要在 aliasDomainForValidationOnly.com上添加如下的CNAME域名解析

_acme-challenge.aliasDomainForValidationOnly.com
	=>	acme-dns regiser return's fulldomain

当给importantDomain.com 请求域名时,Let’s Encrypt Server 请求dns txt _acme-challenge.importantDomain.com ,dns请求cname到_acme-challenge.aliasDomainForValidationOnly.com ,_acme-challenge.aliasDomainForValidationOnly.com cname到acme-dns regiser return’s fulldomain,acme-dns regiser return’s fulldomain 返回设置的txt,最后这一步的信息是在acme-dns上。

这个流程可以使用如下的命令看到整个流程

$ dig txt  _acme-challenge.importantDomain.com

在这个别名域名里的配置,就跟要给这个别名域名发证书是一样的流程;可以使用一个不太重要的域名

acme.sh How to issue a cert
acme.sh 的 DNS Alias模式

你可能感兴趣的:(Https)