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 库。 [![CI 状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/31c96a8fe552af584b5983afc39ddf2e71ca6806185aad0eda564c77331e5b3e.svg)](https://github.com/nrdcg/goacmedns/actions?query=workflow%3AGo) [![Lint 状态](https://github.com/nrdcg/goacmedns/workflows/golangci-lint/badge.svg)](https://github.com/nrdcg/goacmedns/actions?query=workflow%3Agolangci-lint) [![Go 报告卡](https://goreportcard.com/badge/github.com/nrdcg/goacmedns)](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分析, 日志审计