mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 01:19:20 +08:00 
			
		
		
		
	caddytls: Add dns_ttl config, improve Caddyfile tls options (#5287)
				
					
				
			This commit is contained in:
		@ -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"
 | 
				
			||||||
@ -79,7 +80,13 @@ func parseBind(h Helper) ([]ConfigValue, error) {
 | 
				
			|||||||
//	    load                          <paths...>
 | 
					//	    load                          <paths...>
 | 
				
			||||||
//	    ca                            <acme_ca_endpoint>
 | 
					//	    ca                            <acme_ca_endpoint>
 | 
				
			||||||
//	    ca_root                       <pem_file>
 | 
					//	    ca_root                       <pem_file>
 | 
				
			||||||
 | 
					//	    key_type                      [ed25519|p256|p384|rsa2048|rsa4096]
 | 
				
			||||||
//	    dns                           <provider_name> [...]
 | 
					//	    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> [...]
 | 
				
			||||||
@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user