diff --git a/caddyhttp/httpserver/https.go b/caddyhttp/httpserver/https.go index ae3c4e902..a037a86d0 100644 --- a/caddyhttp/httpserver/https.go +++ b/caddyhttp/httpserver/https.go @@ -100,8 +100,8 @@ func enableAutoHTTPS(configs []*SiteConfig, loadCertificates bool) error { } cfg.TLS.Enabled = true cfg.Addr.Scheme = "https" - if loadCertificates && caddytls.HostQualifies(cfg.Addr.Host) { - _, err := cfg.TLS.CacheManagedCertificate(cfg.Addr.Host) + if loadCertificates && caddytls.HostQualifies(cfg.TLS.Hostname) { + _, err := cfg.TLS.CacheManagedCertificate(cfg.TLS.Hostname) if err != nil { return err } diff --git a/caddytls/setup.go b/caddytls/setup.go index 63c2a9e6d..857f198f9 100644 --- a/caddytls/setup.go +++ b/caddytls/setup.go @@ -207,8 +207,21 @@ func setupTLS(c *caddy.Controller) error { } case "must_staple": config.MustStaple = true + case "wildcard": + if !HostQualifies(config.Hostname) { + return c.Errf("Hostname '%s' does not qualify for managed TLS, so cannot manage wildcard certificate for it", config.Hostname) + } + if strings.Contains(config.Hostname, "*") { + return c.Errf("Cannot convert domain name '%s' to a valid wildcard: already has a wildcard label", config.Hostname) + } + parts := strings.Split(config.Hostname, ".") + if len(parts) < 3 { + return c.Errf("Cannot convert domain name '%s' to a valid wildcard: too few labels", config.Hostname) + } + parts[0] = "*" + config.Hostname = strings.Join(parts, ".") default: - return c.Errf("Unknown keyword '%s'", c.Val()) + return c.Errf("Unknown subdirective '%s'", c.Val()) } }