acme-dns 是一个轻量级的用于 acme 证书申请认证的 DNS服务器。

acme-dns 提供了专门用于TXT记录更新的简单API,应与“ _acme-challenge”(子域CNAME记录)一起使用。 这样,在不幸暴露API密钥的情况下,影响仅限于所讨论的子域TXT记录,因而相对来说比较安全。

前提条件

将需要作为认证的域名(如 “acmedns.exsvc.cn”)在 DNS 解析中添加 NS 记录指向需要搭建的服务器公网IP。

通过Docker安装

# 获取镜像
docker pull joohoi/acme-dns

# 创建用于保存配置和数据的文件夹
mkdir -p /data/docker/acme-dns/{config,data}

# 下载配置文件示例并根据需要修改
wget https://raw.githubusercontent.com/joohoi/acme-dns/master/config.cfg -O /data/docker/acme-dns/config/config.cfg
sed -i 's|"auth.example.org. NS auth.example.org."|"*.auth.example.org. NS auth.example.org."|g' /data/docker/acme-dns/config/config.cfg
# 将配置文件中的 auth.example.org 替换为 acmedns.exsvc.cn
# tls 设置项用于API调用时是使用 http 还是 https
# listen 监听的IP和端口,可以设置为 0.0.0.0:53
# 如果使用cdn等访问,将use_header设置为true
# 将 198.51.100.1 替换为你服务器的真实IP

# 创建并运行容器
docker run --name acmedns \
    -p 53:53 \
    -p 53:53/udp \
    -p 443:443 \
    -v /data/docker/acme-dns/config:/etc/acme-dns:ro \
    -v /data/docker/acme-dns/data:/var/lib/acme-dns \
    --restart=always \
    -d joohoi/acme-dns

# 确认服务API可以,返回200状态码
curl -v https://127.0.0.1/health

使用

注册用户

curl -s -X POST https://127.0.0.1/register | python -m json.tool

# 返回结果如下:
{
    "allowfrom": [],
    "fulldomain": "943938bc-f664-426f-ae30-73045e9b8c84.acmedns.exsvc.cn",
    "password": "49GId8eeDmSzo_O--Xw4o14vpZmgsrNYW-6s0pI5",
    "subdomain": "943938bc-f664-426f-ae30-73045e9b8c84",
    "username": "30837203-ab01-4433-ae42-312e2d41e648"
}

# 测试DNS更新
curl -X POST \
  -H "X-Api-User: 30837203-ab01-4433-ae42-312e2d41e648" \
  -H "X-Api-Key: 49GId8eeDmSzo_O--Xw4o14vpZmgsrNYW-6s0pI5" \
  -d '{"subdomain": "943938bc-f664-426f-ae30-73045e9b8c84", "txt": "___validation_token_received_from_the_ca___"}' \
  https://127.0.0.1/update
#查询txt记录是否已更新(返回:___validation_token_received_from_the_ca___)
dig -t txt @acmedns.exsvc.cn 943938bc-f664-426f-ae30-73045e9b8c84.acmedns.exsvc.cn

DNS设置

将需要申请的域名证书的域名的 _acme-challenge 记录 cname 指向上例的 943938bc-f664-426f-ae30-73045e9b8c84.acmedns.exsvc.cn

通过acme.sh申请证书

export ACMEDNS_UPDATE_URL="https://acmedns.exsvc.cn/update"
export ACMEDNS_USERNAME="<username>"
export ACMEDNS_PASSWORD="<password>"
export ACMEDNS_SUBDOMAIN="<subdomain>"

acme.sh --issue --dns dns_acmedns -d example.com -d www.example.com


原文链接地址:https://blog.exsvc.cn/article/acme-dns.html
转载请注明:转载自 易科博客 ,谢谢!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注