nrdcg/goacmedns
GitHub: nrdcg/goacmedns
Go 语言编写的 acme-dns 客户端库,用于在 ACME 证书自动化申请中处理 DNS-01 验证的 TXT 记录更新与账户持久化存储。
Stars: 15 | Forks: 6
# goacmedns
一个用于处理 [acme-dns](https://github.com/joohoi/acme-dns) 客户端通信和持久化账户存储的 Go 库。
[](https://github.com/nrdcg/goacmedns/actions?query=workflow%3AGo)
[](https://github.com/nrdcg/goacmedns/actions?query=workflow%3Agolangci-lint)
[](https://goreportcard.com/report/github.com/nrdcg/goacmedns)
你可能也会对功能相同的 Python 库 [pyacmedns](https://github.com/joohoi/pyacmedns/) 感兴趣。
## 安装
一旦你[安装了 Go](https://golang.org/doc/install) 1.21+,就可以使用 `go install` 来安装 `goacmedns`:
```
go install github.com/nrdcg/goacmedns/cmd/goacmedns@latest
```
## 用法
下面是一个简短的示例,演示如何使用该库更新由 `acme-dns` 实例提供服务的 TXT 记录。
```
package main
import (
"context"
"errors"
"log"
"github.com/nrdcg/goacmedns"
"github.com/nrdcg/goacmedns/storage"
)
const (
domain = "your.example.org"
)
var (
whitelistedNetworks = []string{"192.168.11.0/24", "[::1]/128"}
)
func main() {
// Initialize the client. Point it towards your acme-dns instance.
client, err := goacmedns.NewClient("https://auth.acme-dns.io")
ctx := context.Background()
// Initialize the storage.
// If the file does not exist, it will be automatically created.
st := storage.NewFile("/tmp/storage.json", 0600)
// Check if credentials were previously saved for your domain.
account, err := st.Fetch(ctx, domain)
if err != nil {
if !errors.Is(err, storage.ErrDomainNotFound) {
log.Fatal(err)
}
// The account did not exist.
// Let's create a new one The whitelisted networks parameter is optional and can be nil.
newAcct, err := client.RegisterAccount(ctx, whitelistedNetworks)
if err != nil {
log.Fatal(err)
}
// Save it
err = st.Put(ctx, domain, newAcct)
if err != nil {
log.Fatalf("Failed to put account in storage: %v", err)
}
err = st.Save(ctx)
if err != nil {
log.Fatalf("Failed to save storage: %v", err)
}
account = newAcct
}
// Update the acme-dns TXT record.
err = client.UpdateTXTRecord(ctx, account, "___validation_token_recieved_from_the_ca___")
if err != nil {
log.Fatal(err)
}
}
```
## 预注册
当将 `goacmedns` 与 ACME 客户端钩子结合使用时,
你可能需要提前完成初始的 ACME-DNS 账户创建和 CNAME 委派。
`goacmedns` 命令行工具提供了一种简便的方法来实现这一点:
```
go install github.com/nrdcg/goacmedns/cmd/goacmedns@latest
goacmedns -api http://10.0.0.1:4443 -domain example.com -allowFrom 192.168.100.1/24,1.2.3.4/32,2002:c0a8:2a00::0/40 -storage /tmp/example.storage.json
```
这将会为 `example.com` 注册一个账户,该账户只能在 `http://10.0.0.1:4443` 的 ACME-DNS 服务器上从指定的 CIDR `-allowFrom` 网络中使用,
同时将账户详情保存在 `/tmp/example.storage.json` 中,并将 `example.com` DNS 区域所需的 CNAME 记录输出到 stdout。
标签:EVTX分析, 日志审计