本地获取 Let's Encrypt 证书

  1. 用户发起签发证书的请求
  2. LE 收到请求后根据域名生成字符串并返回给用户
  3. 用户根据收到的字符串更新 DNS TXT Record
  4. 记录生效之后用户发起验证 DNS 记录的请求
  5. LE 收到请求后验证 DNS 记录,成功则返回证书

# 使用 DNS TXT Record 模式

实现在没有公网 IP 的情况下获取证书

# 0 原理

  1. 用户发起签发证书的请求
  2. LE 收到请求后根据域名生成字符串并返回给用户
  3. 用户根据收到的字符串更新 DNS TXT Record
  4. 记录生效之后用户发起验证 DNS 记录的请求
  5. LE 收到请求后验证 DNS 记录,成功则返回证书

# 1 安装脚本

curl https://get.acme.sh | sh
source ~/.zshrc

# 2 生成 TXT Recode 字符串

acme.sh --issue --dns -d eleven.keng42.com

得到类似以下的回复

Add the following txt record:
Domain:_acme-challenge.eleven.keng42.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c

# 3 获取证书

更新 DNS 记录,等待记录生效之后

acme.sh --renew -d eleven.keng42.com

生成的证书和密钥在 ~/.acme.sh/eleven.keng42.com/

文件名 类型
ca.cer LE 证书
eleven.keng42.com.cer 域名证书
fullchain.cer LE 和域名的证书
eleven.keng42.com.conf
eleven.keng42.com.csr.conf
eleven.keng42.com.csr
eleven.keng42.com.key 域名私钥

原文