mirror of
https://github.com/caddyserver/caddy.git
synced 2025-02-02 06:07:21 +01:00
caddytls: Add dns_ttl
config, improve Caddyfile tls
options (#5287)
This commit is contained in:
parent
4e9ad50f65
commit
55035d327a
3 changed files with 173 additions and 9 deletions
|
@ -24,6 +24,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/caddyserver/caddy/v2"
|
"github.com/caddyserver/caddy/v2"
|
||||||
"github.com/caddyserver/caddy/v2/caddyconfig"
|
"github.com/caddyserver/caddy/v2/caddyconfig"
|
||||||
|
@ -75,16 +76,22 @@ func parseBind(h Helper) ([]ConfigValue, error) {
|
||||||
// trusted_leaf_cert <base64_der>
|
// trusted_leaf_cert <base64_der>
|
||||||
// trusted_leaf_cert_file <filename>
|
// trusted_leaf_cert_file <filename>
|
||||||
// }
|
// }
|
||||||
// alpn <values...>
|
// alpn <values...>
|
||||||
// load <paths...>
|
// load <paths...>
|
||||||
// ca <acme_ca_endpoint>
|
// ca <acme_ca_endpoint>
|
||||||
// ca_root <pem_file>
|
// ca_root <pem_file>
|
||||||
// dns <provider_name> [...]
|
// key_type [ed25519|p256|p384|rsa2048|rsa4096]
|
||||||
|
// dns <provider_name> [...]
|
||||||
|
// propagation_delay <duration>
|
||||||
|
// propagation_timeout <duration>
|
||||||
|
// resolvers <dns_servers...>
|
||||||
|
// dns_ttl <duration>
|
||||||
|
// dns_challenge_override_domain <domain>
|
||||||
// on_demand
|
// on_demand
|
||||||
// eab <key_id> <mac_key>
|
// eab <key_id> <mac_key>
|
||||||
// issuer <module_name> [...]
|
// issuer <module_name> [...]
|
||||||
// get_certificate <module_name> [...]
|
// get_certificate <module_name> [...]
|
||||||
// insecure_secrets_log <log_file>
|
// insecure_secrets_log <log_file>
|
||||||
// }
|
// }
|
||||||
func parseTLS(h Helper) ([]ConfigValue, error) {
|
func parseTLS(h Helper) ([]ConfigValue, error) {
|
||||||
cp := new(caddytls.ConnectionPolicy)
|
cp := new(caddytls.ConnectionPolicy)
|
||||||
|
@ -363,6 +370,75 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
|
||||||
}
|
}
|
||||||
acmeIssuer.Challenges.DNS.Resolvers = args
|
acmeIssuer.Challenges.DNS.Resolvers = args
|
||||||
|
|
||||||
|
case "propagation_delay":
|
||||||
|
arg := h.RemainingArgs()
|
||||||
|
if len(arg) != 1 {
|
||||||
|
return nil, h.ArgErr()
|
||||||
|
}
|
||||||
|
delayStr := arg[0]
|
||||||
|
delay, err := caddy.ParseDuration(delayStr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, h.Errf("invalid propagation_delay duration %s: %v", delayStr, err)
|
||||||
|
}
|
||||||
|
if acmeIssuer == nil {
|
||||||
|
acmeIssuer = new(caddytls.ACMEIssuer)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges == nil {
|
||||||
|
acmeIssuer.Challenges = new(caddytls.ChallengesConfig)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges.DNS == nil {
|
||||||
|
acmeIssuer.Challenges.DNS = new(caddytls.DNSChallengeConfig)
|
||||||
|
}
|
||||||
|
acmeIssuer.Challenges.DNS.PropagationDelay = caddy.Duration(delay)
|
||||||
|
|
||||||
|
case "propagation_timeout":
|
||||||
|
arg := h.RemainingArgs()
|
||||||
|
if len(arg) != 1 {
|
||||||
|
return nil, h.ArgErr()
|
||||||
|
}
|
||||||
|
timeoutStr := arg[0]
|
||||||
|
var timeout time.Duration
|
||||||
|
if timeoutStr == "-1" {
|
||||||
|
timeout = time.Duration(-1)
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
timeout, err = caddy.ParseDuration(timeoutStr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, h.Errf("invalid propagation_timeout duration %s: %v", timeoutStr, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if acmeIssuer == nil {
|
||||||
|
acmeIssuer = new(caddytls.ACMEIssuer)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges == nil {
|
||||||
|
acmeIssuer.Challenges = new(caddytls.ChallengesConfig)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges.DNS == nil {
|
||||||
|
acmeIssuer.Challenges.DNS = new(caddytls.DNSChallengeConfig)
|
||||||
|
}
|
||||||
|
acmeIssuer.Challenges.DNS.PropagationTimeout = caddy.Duration(timeout)
|
||||||
|
|
||||||
|
case "dns_ttl":
|
||||||
|
arg := h.RemainingArgs()
|
||||||
|
if len(arg) != 1 {
|
||||||
|
return nil, h.ArgErr()
|
||||||
|
}
|
||||||
|
ttlStr := arg[0]
|
||||||
|
ttl, err := caddy.ParseDuration(ttlStr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, h.Errf("invalid dns_ttl duration %s: %v", ttlStr, err)
|
||||||
|
}
|
||||||
|
if acmeIssuer == nil {
|
||||||
|
acmeIssuer = new(caddytls.ACMEIssuer)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges == nil {
|
||||||
|
acmeIssuer.Challenges = new(caddytls.ChallengesConfig)
|
||||||
|
}
|
||||||
|
if acmeIssuer.Challenges.DNS == nil {
|
||||||
|
acmeIssuer.Challenges.DNS = new(caddytls.DNSChallengeConfig)
|
||||||
|
}
|
||||||
|
acmeIssuer.Challenges.DNS.TTL = caddy.Duration(ttl)
|
||||||
|
|
||||||
case "dns_challenge_override_domain":
|
case "dns_challenge_override_domain":
|
||||||
arg := h.RemainingArgs()
|
arg := h.RemainingArgs()
|
||||||
if len(arg) != 1 {
|
if len(arg) != 1 {
|
||||||
|
|
70
caddytest/integration/caddyfile_adapt/tls_dns_ttl.txt
Normal file
70
caddytest/integration/caddyfile_adapt/tls_dns_ttl.txt
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
localhost
|
||||||
|
|
||||||
|
respond "hello from localhost"
|
||||||
|
tls {
|
||||||
|
issuer acme {
|
||||||
|
dns_ttl 5m10s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----------
|
||||||
|
{
|
||||||
|
"apps": {
|
||||||
|
"http": {
|
||||||
|
"servers": {
|
||||||
|
"srv0": {
|
||||||
|
"listen": [
|
||||||
|
":443"
|
||||||
|
],
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"match": [
|
||||||
|
{
|
||||||
|
"host": [
|
||||||
|
"localhost"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"handle": [
|
||||||
|
{
|
||||||
|
"handler": "subroute",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"handle": [
|
||||||
|
{
|
||||||
|
"body": "hello from localhost",
|
||||||
|
"handler": "static_response"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"terminal": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"automation": {
|
||||||
|
"policies": [
|
||||||
|
{
|
||||||
|
"subjects": [
|
||||||
|
"localhost"
|
||||||
|
],
|
||||||
|
"issuers": [
|
||||||
|
{
|
||||||
|
"challenges": {
|
||||||
|
"dns": {
|
||||||
|
"ttl": 310000000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"module": "acme"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -266,6 +266,7 @@ func (iss *ACMEIssuer) GetACMEIssuer() *ACMEIssuer { return iss }
|
||||||
// propagation_delay <duration>
|
// propagation_delay <duration>
|
||||||
// propagation_timeout <duration>
|
// propagation_timeout <duration>
|
||||||
// resolvers <dns_servers...>
|
// resolvers <dns_servers...>
|
||||||
|
// dns_ttl <duration>
|
||||||
// dns_challenge_override_domain <domain>
|
// dns_challenge_override_domain <domain>
|
||||||
// preferred_chains [smallest] {
|
// preferred_chains [smallest] {
|
||||||
// root_common_name <common_names...>
|
// root_common_name <common_names...>
|
||||||
|
@ -445,6 +446,23 @@ func (iss *ACMEIssuer) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||||
return d.ArgErr()
|
return d.ArgErr()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "dns_ttl":
|
||||||
|
if !d.NextArg() {
|
||||||
|
return d.ArgErr()
|
||||||
|
}
|
||||||
|
ttlStr := d.Val()
|
||||||
|
ttl, err := caddy.ParseDuration(ttlStr)
|
||||||
|
if err != nil {
|
||||||
|
return d.Errf("invalid dns_ttl duration %s: %v", ttlStr, err)
|
||||||
|
}
|
||||||
|
if iss.Challenges == nil {
|
||||||
|
iss.Challenges = new(ChallengesConfig)
|
||||||
|
}
|
||||||
|
if iss.Challenges.DNS == nil {
|
||||||
|
iss.Challenges.DNS = new(DNSChallengeConfig)
|
||||||
|
}
|
||||||
|
iss.Challenges.DNS.TTL = caddy.Duration(ttl)
|
||||||
|
|
||||||
case "dns_challenge_override_domain":
|
case "dns_challenge_override_domain":
|
||||||
arg := d.RemainingArgs()
|
arg := d.RemainingArgs()
|
||||||
if len(arg) != 1 {
|
if len(arg) != 1 {
|
||||||
|
|
Loading…
Reference in a new issue