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模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章