:配置指南與源碼解析)
網(wǎng)絡(luò)安全密碼學(xué)【免費(fèi)下載鏈接】legoLets Encrypt/ACME client and library written in Go項(xiàng)目地址https://gitcode.com/gh_mirrors/le/lego點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文以 legoGo 編寫的 Lets Encrypt/ACME 客戶端官方 DNS 提供商文檔為骨架系統(tǒng)講解如何配置yandex360提供商通過 Yandex 360 的 Domain DNS 服務(wù)自動(dòng)完成 ACME DNS-01 挑戰(zhàn)。讀完本文你將掌握YANDEX360_OAUTH_TOKEN、YANDEX360_ORG_ID等核心憑據(jù)的獲取與使用方式、全部可選調(diào)優(yōu)參數(shù)超時(shí)、輪詢間隔、TTL的含義并能結(jié)合 lego 源碼理解該提供商在后臺(tái)調(diào)用 Yandex 360 API 的完整流程從而在實(shí)際環(huán)境中正確簽發(fā)和續(xù)期通配符證書。一、Yandex 360 提供商概覽lego 內(nèi)置了面向 Yandex 360 中并由生成器自動(dòng)渲染為官方文檔 docs/content/dns/zz_gen_yandex360.mdCodeyandex360在lego命令行中通過--dns yandex360指定Sincev4.14.0即該提供商自 lego v4.14.0 版本起可用官方 APIYandex 360 API 的 DomainDNSServicehttps://yandex.ru/dev/api360/doc/ref/DomainDNSService/與所有 DNS 提供商一樣它的定位是在 ACME DNS-01 挑戰(zhàn)期間程序自動(dòng)向你的 DNS 托管商這里是 Yandex 360寫入一條_acme-challengeTXT 記錄待 ACME 服務(wù)器驗(yàn)證通過后再自動(dòng)刪除該記錄。因此使用它之前你需要已經(jīng)將待簽發(fā)證書的域名解析托管在 Yandex 360 的組織org下。二、快速上手命令行用法文檔給出的最簡(jiǎn)用法是設(shè)置兩個(gè)環(huán)境變量后直接運(yùn)行l(wèi)ego runYANDEX360_OAUTH_TOKENyour OAuth Token \ YANDEX360_ORG_IDyour organization ID \ lego run --dns yandex360 -d *.example.com -d example.com其中-d *.example.com與-d example.com分別簽發(fā)通配符域名和裸域名二者都需要 DNS-01 挑戰(zhàn)因此適合使用 DNS 提供商方式--dns yandex360指定使用 Yandex 360 提供商兩個(gè)環(huán)境變量缺一不可缺少任何一個(gè)都會(huì)在初始化階段直接報(bào)錯(cuò)詳見下文憑據(jù)與源碼解析。這種方式的適用前提你需要一個(gè) Yandex 360 組織的 OAuth Token且該 Token 具備管理組織下域名 DNS 記錄的權(quán)限同時(shí)example.com的 DNS 解析必須托管在 Yandex 360 中。三、憑據(jù)Credentials文檔定義的必填憑據(jù)共兩項(xiàng)環(huán)境變量名描述YANDEX360_OAUTH_TOKENOAuth TokenYANDEX360_ORG_ID組織 IDorganization ID憑據(jù)的_FILE后綴支持文檔特別說明所有環(huán)境變量名都可以追加_FILE后綴改為引用一個(gè)文件路徑而不是直接寫值。例如YANDEX360_OAUTH_TOKEN_FILE/path/to/oauth_token \ YANDEX360_ORG_ID_FILE/path/to/org_id \ lego run --dns yandex360 -d *.example.com/path/to/oauth_token文件內(nèi)容即為 Token 字符串。這一機(jī)制適用于所有 lego 提供商通用說明見 docs/content/dns/_index.md 中的 Configuration and Credentials 一節(jié)以 Cloudflare 為例演示了CLOUDFLARE_EMAIL_FILE、CLOUDFLARE_API_KEY_FILE的用法。它尤其適合在 CI/CD、容器或密鑰管理場(chǎng)景中避免把 Token 明文寫進(jìn)命令行或環(huán)境。憑據(jù)校驗(yàn)邏輯源碼確認(rèn)從源碼 providers/dns/yandex360/yandex360.go 可以看到NewDNSProvider()會(huì)調(diào)用env.Get(EnvOAuthToken, EnvOrgID)一次性讀取兩個(gè)變量任何一個(gè)缺失都會(huì)返回錯(cuò)誤隨后OrgID會(huì)通過strconv.ParseInt(values[EnvOrgID], 10, 64)解析為int64。對(duì)應(yīng)的測(cè)試用例 providers/dns/yandex360/yandex360_test.go 覆蓋了三種場(chǎng)景兩個(gè)變量都提供成功創(chuàng)建 provider缺少YANDEX360_ORG_ID報(bào)錯(cuò)yandex360: some credentials information are missing: YANDEX360_ORG_ID缺少YANDEX360_OAUTH_TOKEN報(bào)錯(cuò)yandex360: some credentials information are missing: YANDEX360_OAUTH_TOKEN。此外在底層客戶端 providers/dns/yandex360/internal/client.go 中Token 為空或OrgID為 0 也會(huì)被拒絕OAuth token is required/orgID is required。因此請(qǐng)確保 OAuth Token 非空且組織 ID 是合法的非零數(shù)字。四、附加配置Additional Configuration除了憑據(jù)該提供商還支持四項(xiàng)可選調(diào)優(yōu)參數(shù)文檔給出的默認(rèn)值如下環(huán)境變量名描述默認(rèn)值YANDEX360_HTTP_TIMEOUTAPI 請(qǐng)求超時(shí)秒30YANDEX360_POLLING_INTERVALDNS 傳播檢查間隔秒2YANDEX360_PROPAGATION_TIMEOUT等待 DNS 傳播的最大時(shí)間秒60YANDEX360_TTL挑戰(zhàn) TXT 記錄的 TTL秒21600這些變量同樣支持_FILE后綴。默認(rèn)值在源碼中的體現(xiàn)從 providers/dns/yandex360/yandex360.go 的NewDefaultConfig()可以看到默認(rèn)值的真實(shí)來(lái)源TTLenv.GetOrDefaultInt(EnvTTL, 21600)默認(rèn) 21600 秒6 小時(shí)PropagationTimeoutenv.GetOrDefaultSecond(EnvPropagationTimeout, dns01.DefaultPropagationTimeout)即復(fù)用 lego 全局默認(rèn)的 DNS 傳播超時(shí)60 秒PollingIntervalenv.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval)即全局默認(rèn)輪詢間隔2 秒HTTPClient.Timeoutenv.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second)默認(rèn) 30 秒。三個(gè)超時(shí)/輪詢參數(shù)通過DNSProvider.Timeout()方法yandex360.go暴露給 lego 的挑戰(zhàn)調(diào)度器用于決定寫完 TXT 記錄后等待多久、以什么頻率去檢查 DNS 傳播是否完成。如果 Yandex 360 的 DNS 生效較慢可以適當(dāng)增大YANDEX360_PROPAGATION_TIMEOUT若 API 響應(yīng)較慢可增大YANDEX360_HTTP_TIMEOUT。五、挑戰(zhàn)流程與 Yandex 360 API 調(diào)用源碼級(jí)解析為了說明程序到底做了什么下面結(jié)合源碼梳理 DNS-01 挑戰(zhàn)在 Yandex 360 提供商中的完整鏈路。1. Present添加 TXT 記錄Presentyandex360.go負(fù)責(zé)寫入挑戰(zhàn)記錄步驟如下由dns01.GetChallengeInfo計(jì)算挑戰(zhàn)記錄全限定名EffectiveFQDN通常形如_acme-challenge.example.com.與校驗(yàn)值調(diào)用dns01.DefaultClient().FindZoneByFqdn通過 DNS 查詢找到權(quán)威區(qū)域authZone例如example.com.用dns01.ExtractSubDomain從全限定名中剝離區(qū)域得到子域名_acme-challenge構(gòu)造internal.Record{Name: _acme-challenge, TTL: config.TTL, Text: 校驗(yàn)值, Type: TXT}調(diào)用client.AddRecord(ctx, authZone, record)。底層 HTTP 調(diào)用在 providers/dns/yandex360/internal/client.go 中實(shí)現(xiàn)POST https://api360.yandex.net/directory/v1/org/{orgId}/domains/{domain}/dns請(qǐng)求攜帶Authorization: OAuth token頭與 JSON 請(qǐng)求體成功后返回記錄的recordId。Present會(huì)把recordId以 token 為鍵緩存在recordIDsmap 中用互斥鎖保護(hù)供后續(xù)清理使用。2. CleanUp刪除 TXT 記錄挑戰(zhàn)驗(yàn)證完成后CleanUpyandex360.go根據(jù)緩存的recordId調(diào)用DELETE https://api360.yandex.net/directory/v1/org/{orgId}/domains/{domain}/dns/{recordId}刪除成功后從緩存中移除對(duì)應(yīng)記錄。如果找不到緩存的 recordID會(huì)返回yandex360: unknown recordID for %q錯(cuò)誤。3. 數(shù)據(jù)模型與錯(cuò)誤處理Yandex 360 API 返回的記錄結(jié)構(gòu)定義在 providers/dns/yandex360/internal/types.goRecord結(jié)構(gòu)體包含recordId、name、text、ttl、type等字段還有address、priority、weight等供其他記錄類型使用。非 2xx 響應(yīng)會(huì)被解析為APIError{code, message, details}types.go錯(cuò)誤信息形如[status code: %d] code: message: details。4. 測(cè)試與模擬驗(yàn)證該提供商的正確性由兩類測(cè)試保障單元/模擬測(cè)試providers/dns/yandex360/internal/client_test.go 用httptest模擬服務(wù)器斷言請(qǐng)求路徑為POST/DELETE /directory/v1/org/123456/domains/example.com/dns請(qǐng)求體為{name:_acme-challenge,text:txtxtxt,ttl:60,type:TXT}并驗(yàn)證請(qǐng)求頭包含Authorization: OAuth secret。對(duì)應(yīng)的響應(yīng)夾具在 add-record.json、delete-record.json、error.json。實(shí)況測(cè)試Live Testyandex360_test.go 中的TestLivePresent/TestLiveCleanUp需要真實(shí)憑據(jù)才會(huì)運(yùn)行默認(rèn)跳過。六、作為 Go 庫(kù)使用Programmatic Usage除了 CLI你還可以在 Go 程序中直接使用該提供商。核心 API 有兩個(gè)import github.com/go-acme/lego/v5/providers/dns/yandex360 // 方式一從環(huán)境變量讀取憑據(jù) provider, err : yandex360.NewDNSProvider() if err ! nil { log.Fatal(err) } // 方式二通過 Config 結(jié)構(gòu)體手動(dòng)配置 config : yandex360.NewDefaultConfig() config.OAuthToken your-token config.OrgID 123456 config.TTL 300 // 自定義 TTL秒 provider, err yandex360.NewDNSProviderConfig(config) if err ! nil { log.Fatal(err) }Config結(jié)構(gòu)體yandex360.go字段包括OAuthToken、OrgIDint64、PropagationTimeout、PollingInterval、TTL和可選的HTTPClient。若HTTPClient為 nil會(huì)使用默認(rèn) 30 秒超時(shí)的 client。將provider傳給 lego 的certificate.Obtain等流程即可DNSProvider同時(shí)實(shí)現(xiàn)了challenge.Provider與challenge.ProviderTimeout接口見 yandex360.go因此 lego 能自動(dòng)獲取超時(shí)與輪詢參數(shù)。七、常見問題與排錯(cuò)建議根據(jù)源碼錯(cuò)誤路徑和測(cè)試用例可以總結(jié)以下排查思路提示some credentials information are missing: ...YANDEX360_OAUTH_TOKEN或YANDEX360_ORG_ID未設(shè)置。注意_FILE后綴變量與原變量只能二選一且文件路徑必須可讀。提示OAuth token is required/orgID is requiredToken 為空字符串或ORG_ID解析后為 0。API 返回 401如測(cè)試中模擬的status code: 401OAuth Token 無(wú)效或沒有該組織域名的 DNS 管理權(quán)限請(qǐng)檢查 Token 的作用域。提示could not find zone for domain ...FindZoneByFqdn無(wú)法通過公共 DNS 找到該域名的權(quán)威區(qū)域常見原因是域名并未托管在 Yandex 360或 NS 記錄尚未生效。挑戰(zhàn)驗(yàn)證超時(shí)可適當(dāng)調(diào)大YANDEX360_PROPAGATION_TIMEOUT與YANDEX360_POLLING_INTERVAL以容忍 Yandex 360 DNS 生效延遲。八、延伸閱讀該提供商的生成文檔源文件docs/content/dns/zz_gen_yandex360.md提供商元數(shù)據(jù)配置TOMLproviders/dns/yandex360/yandex360.toml提供商實(shí)現(xiàn) providers/dns/yandex360/yandex360.go底層 API 客戶端providers/dns/yandex360/internal/client.goDNS 挑戰(zhàn)通用配置與_FILE機(jī)制docs/content/dns/_index.md注上述全部環(huán)境變量與默認(rèn)值均以當(dāng)前倉(cāng)庫(kù) v4.14.0 的實(shí)現(xiàn)為準(zhǔn)使用前請(qǐng)確認(rèn)你的 lego 版本不低于 v4.14.0并遵循 README.md 中的安裝與全局配置說明。贊分享網(wǎng)絡(luò)安全密碼學(xué)【免費(fèi)下載鏈接】legoLets Encrypt/ACME client and library written in Go項(xiàng)目地址https://gitcode.com/gh_mirrors/le/lego點(diǎn)擊查看免費(fèi)下載相關(guān)推薦使用 lego 通過 Fornex DNS Provider 完成 DNS-01 挑戰(zhàn)配置指南與源碼解析使用 lego 通過 Fornex DNS Provider 完成 DNS 01 挑戰(zhàn)配置指南與源碼解析 本指南以 legoGo 編寫的 Lets Enc網(wǎng)絡(luò)安全密碼學(xué)使用 lego 通過 DNS.services 完成 DNS-01 挑戰(zhàn)配置、原理與源碼解析使用 lego 通過 DNS.services 完成 DNS 01 挑戰(zhàn)配置、原理與源碼解析 本篇技術(shù)指南以 lego 項(xiàng)目?jī)?nèi)置的 DNS.services網(wǎng)絡(luò)安全密碼學(xué)使用 lego 通過 Bunny DNS 完成 DNS-01 挑戰(zhàn)完整配置指南與源碼實(shí)現(xiàn)解析使用 lego 通過 Bunny DNS 完成 DNS 01 挑戰(zhàn)完整配置指南與源碼實(shí)現(xiàn)解析 本篇技術(shù)指南以 lego 項(xiàng)目官方文檔 docs/content網(wǎng)絡(luò)安全密碼學(xué)上一篇番茄小說下載器完整指南如何輕松搭建個(gè)人離線圖書館下一篇5款VLC皮膚主題讓你的播放器成為視覺享受的藝術(shù)品創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考