diff --git a/README.md b/README.md
index 85e3e3f782..a430446c32 100644
--- a/README.md
+++ b/README.md
@@ -200,37 +200,37 @@ Detailed documentation is available [here](https://go-acme.github.io/lego/dns).
Simply.com |
Sonic |
Stackpath |
- Tencent Cloud DNS |
+ Technitium |
+ Tencent Cloud DNS |
Timeweb Cloud |
TransIP |
UKFast SafeDNS |
- Ultradns |
+ Ultradns |
Variomedia |
VegaDNS |
Vercel |
- Versio.[nl|eu|uk] |
+ Versio.[nl|eu|uk] |
VinylDNS |
VK Cloud |
Volcano Engine/火山引擎 |
- Vscale |
+ Vscale |
Vultr |
Webnames |
Websupport |
- WEDOS |
+ WEDOS |
Yandex 360 |
Yandex Cloud |
Yandex PDD |
- Zone.ee |
+ Zone.ee |
Zonomi |
|
|
- |
diff --git a/cmd/zz_gen_cmd_dnshelp.go b/cmd/zz_gen_cmd_dnshelp.go
index dd217c7170..52eb0f11f7 100644
--- a/cmd/zz_gen_cmd_dnshelp.go
+++ b/cmd/zz_gen_cmd_dnshelp.go
@@ -132,6 +132,7 @@ func allDNSCodes() string {
"simply",
"sonic",
"stackpath",
+ "technitium",
"tencentcloud",
"timewebcloud",
"transip",
@@ -2728,6 +2729,27 @@ func displayDNSHelp(w io.Writer, name string) error {
ew.writeln()
ew.writeln(`More information: https://go-acme.github.io/lego/dns/stackpath`)
+ case "technitium":
+ // generated from: providers/dns/technitium/technitium.toml
+ ew.writeln(`Configuration for Technitium.`)
+ ew.writeln(`Code: 'technitium'`)
+ ew.writeln(`Since: 'v4.20.0'`)
+ ew.writeln()
+
+ ew.writeln(`Credentials:`)
+ ew.writeln(` - "TECHNITIUM_API_TOKEN": API token`)
+ ew.writeln(` - "TECHNITIUM_SERVER_BASE_URL": Server base URL`)
+ ew.writeln()
+
+ ew.writeln(`Additional Configuration:`)
+ ew.writeln(` - "TECHNITIUM_HTTP_TIMEOUT": API request timeout`)
+ ew.writeln(` - "TECHNITIUM_POLLING_INTERVAL": Time between DNS propagation check`)
+ ew.writeln(` - "TECHNITIUM_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation`)
+ ew.writeln(` - "TECHNITIUM_TTL": The TTL of the TXT record used for the DNS challenge`)
+
+ ew.writeln()
+ ew.writeln(`More information: https://go-acme.github.io/lego/dns/technitium`)
+
case "tencentcloud":
// generated from: providers/dns/tencentcloud/tencentcloud.toml
ew.writeln(`Configuration for Tencent Cloud DNS.`)
diff --git a/docs/content/dns/zz_gen_technitium.md b/docs/content/dns/zz_gen_technitium.md
new file mode 100644
index 0000000000..16dc5d2be4
--- /dev/null
+++ b/docs/content/dns/zz_gen_technitium.md
@@ -0,0 +1,71 @@
+---
+title: "Technitium"
+date: 2019-03-03T16:39:46+01:00
+draft: false
+slug: technitium
+dnsprovider:
+ since: "v4.20.0"
+ code: "technitium"
+ url: "https://technitium.com/"
+---
+
+
+
+
+
+
+Configuration for [Technitium](https://technitium.com/).
+
+
+
+
+- Code: `technitium`
+- Since: v4.20.0
+
+
+Here is an example bash command using the Technitium provider:
+
+```bash
+TECHNITIUM_SERVER_BASE_URL="https://localhost:5380" \
+TECHNITIUM_API_TOKEN="xxxxxxxxxxxxxxxxxxxxx" \
+lego --email you@example.com --dns technitium -d '*.example.com' -d example.com run
+```
+
+
+
+
+## Credentials
+
+| Environment Variable Name | Description |
+|-----------------------|-------------|
+| `TECHNITIUM_API_TOKEN` | API token |
+| `TECHNITIUM_SERVER_BASE_URL` | Server base URL |
+
+The environment variable names can be suffixed by `_FILE` to reference a file instead of a value.
+More information [here]({{% ref "dns#configuration-and-credentials" %}}).
+
+
+## Additional Configuration
+
+| Environment Variable Name | Description |
+|--------------------------------|-------------|
+| `TECHNITIUM_HTTP_TIMEOUT` | API request timeout |
+| `TECHNITIUM_POLLING_INTERVAL` | Time between DNS propagation check |
+| `TECHNITIUM_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation |
+| `TECHNITIUM_TTL` | The TTL of the TXT record used for the DNS challenge |
+
+The environment variable names can be suffixed by `_FILE` to reference a file instead of a value.
+More information [here]({{% ref "dns#configuration-and-credentials" %}}).
+
+Technitium DNS Server supports Dynamic Updates (RFC2136) for primary zones,
+so you can also use the [RFC2136 provider](https://go-acme.github.io/lego/dns/rfc2136/index.html).
+
+
+
+## More information
+
+- [API documentation](https://github.com/TechnitiumSoftware/DnsServer/blob/0f83d23e605956b66ac76921199e241d9cc061bd/APIDOCS.md)
+
+
+
+
diff --git a/docs/data/zz_cli_help.toml b/docs/data/zz_cli_help.toml
index efbd36bc49..5b7d56e4c8 100644
--- a/docs/data/zz_cli_help.toml
+++ b/docs/data/zz_cli_help.toml
@@ -141,7 +141,7 @@ To display the documentation for a specific DNS provider, run:
$ lego dnshelp -c code
Supported DNS providers:
- acme-dns, alidns, allinkl, arvancloud, auroradns, autodns, azure, azuredns, bindman, bluecat, brandit, bunny, checkdomain, civo, clouddns, cloudflare, cloudns, cloudru, cloudxns, conoha, constellix, corenetworks, cpanel, derak, desec, designate, digitalocean, directadmin, dnshomede, dnsimple, dnsmadeeasy, dnspod, dode, domeneshop, dreamhost, duckdns, dyn, dynu, easydns, edgedns, efficientip, epik, exec, exoscale, freemyip, gandi, gandiv5, gcloud, gcore, glesys, godaddy, googledomains, hetzner, hostingde, hosttech, httpnet, httpreq, huaweicloud, hurricane, hyperone, ibmcloud, iij, iijdpf, infoblox, infomaniak, internetbs, inwx, ionos, ipv64, iwantmyname, joker, liara, lightsail, limacity, linode, liquidweb, loopia, luadns, mailinabox, manual, metaname, mijnhost, mittwald, mydnsjp, mythicbeasts, namecheap, namedotcom, namesilo, nearlyfreespeech, netcup, netlify, nicmanager, nifcloud, njalla, nodion, ns1, oraclecloud, otc, ovh, pdns, plesk, porkbun, rackspace, rcodezero, regfish, regru, rfc2136, rimuhosting, route53, safedns, sakuracloud, scaleway, selectel, selectelv2, selfhostde, servercow, shellrent, simply, sonic, stackpath, tencentcloud, timewebcloud, transip, ultradns, variomedia, vegadns, vercel, versio, vinyldns, vkcloud, volcengine, vscale, vultr, webnames, websupport, wedos, yandex, yandex360, yandexcloud, zoneee, zonomi
+ acme-dns, alidns, allinkl, arvancloud, auroradns, autodns, azure, azuredns, bindman, bluecat, brandit, bunny, checkdomain, civo, clouddns, cloudflare, cloudns, cloudru, cloudxns, conoha, constellix, corenetworks, cpanel, derak, desec, designate, digitalocean, directadmin, dnshomede, dnsimple, dnsmadeeasy, dnspod, dode, domeneshop, dreamhost, duckdns, dyn, dynu, easydns, edgedns, efficientip, epik, exec, exoscale, freemyip, gandi, gandiv5, gcloud, gcore, glesys, godaddy, googledomains, hetzner, hostingde, hosttech, httpnet, httpreq, huaweicloud, hurricane, hyperone, ibmcloud, iij, iijdpf, infoblox, infomaniak, internetbs, inwx, ionos, ipv64, iwantmyname, joker, liara, lightsail, limacity, linode, liquidweb, loopia, luadns, mailinabox, manual, metaname, mijnhost, mittwald, mydnsjp, mythicbeasts, namecheap, namedotcom, namesilo, nearlyfreespeech, netcup, netlify, nicmanager, nifcloud, njalla, nodion, ns1, oraclecloud, otc, ovh, pdns, plesk, porkbun, rackspace, rcodezero, regfish, regru, rfc2136, rimuhosting, route53, safedns, sakuracloud, scaleway, selectel, selectelv2, selfhostde, servercow, shellrent, simply, sonic, stackpath, technitium, tencentcloud, timewebcloud, transip, ultradns, variomedia, vegadns, vercel, versio, vinyldns, vkcloud, volcengine, vscale, vultr, webnames, websupport, wedos, yandex, yandex360, yandexcloud, zoneee, zonomi
More information: https://go-acme.github.io/lego/dns
"""
diff --git a/providers/dns/technitium/technitium.toml b/providers/dns/technitium/technitium.toml
index 2b35837f91..4e5993d9ad 100644
--- a/providers/dns/technitium/technitium.toml
+++ b/providers/dns/technitium/technitium.toml
@@ -13,6 +13,9 @@ lego --email you@example.com --dns technitium -d '*.example.com' -d example.com
Additional = '''
Technitium DNS Server supports Dynamic Updates (RFC2136) for primary zones,
so you can also use the [RFC2136 provider](https://go-acme.github.io/lego/dns/rfc2136/index.html).
+
+[RFC2136 provider](https://go-acme.github.io/lego/dns/rfc2136/index.html) is much better compared to the HTTP API option from security perspective.
+Technitium recommends to use in production over the HTTP API.
'''
[Configuration]
diff --git a/providers/dns/zz_gen_dns_providers.go b/providers/dns/zz_gen_dns_providers.go
index 63f16db94e..3d9f4965de 100644
--- a/providers/dns/zz_gen_dns_providers.go
+++ b/providers/dns/zz_gen_dns_providers.go
@@ -126,6 +126,7 @@ import (
"github.com/go-acme/lego/v4/providers/dns/simply"
"github.com/go-acme/lego/v4/providers/dns/sonic"
"github.com/go-acme/lego/v4/providers/dns/stackpath"
+ "github.com/go-acme/lego/v4/providers/dns/technitium"
"github.com/go-acme/lego/v4/providers/dns/tencentcloud"
"github.com/go-acme/lego/v4/providers/dns/timewebcloud"
"github.com/go-acme/lego/v4/providers/dns/transip"
@@ -392,6 +393,8 @@ func NewDNSChallengeProviderByName(name string) (challenge.Provider, error) {
return sonic.NewDNSProvider()
case "stackpath":
return stackpath.NewDNSProvider()
+ case "technitium":
+ return technitium.NewDNSProvider()
case "tencentcloud":
return tencentcloud.NewDNSProvider()
case "timewebcloud":