{{define "title"}}Let's Encrypt - Email Server Management{{end}} {{define "page_title"}}Let's Encrypt{{end}} {{define "content"}}

Let's Encrypt

Two independent certificates can be obtained here — DNS-01 (needs a supported DNS provider) and HTTP-01 (needs nothing but port 80 reachable from the internet). Enable either, both, or neither. Which listener (SMTP-TLS, IMAP-TLS, or the admin/webmail HTTPS) actually uses which certificate is chosen on the Settings page's TLS/SSL section — e.g. run the HTTP-01 cert on mail while the dashboard keeps a DNS-01 or custom cert.

DNS-01
Mode
{{if .status.Enabled}} Enabled {{if .status.Staging}}(staging){{end}} {{else}} Disabled {{end}}
Domains
{{if .status.Domains}}{{range .status.Domains}}{{.}} {{end}}{{else}}none configured{{end}}
DNS Provider
{{if .status.Provider}}{{.status.Provider}}{{else}}none selected{{end}}
Certificate expires
{{if .status.NotAfter.IsZero}}unknown{{else}}{{strftime "%Y-%m-%d %H:%M" .status.NotAfter}}{{end}}
Last attempt
{{if .status.LastAttempt.IsZero}} none yet this run {{else if .status.LastError}} {{strftime "%Y-%m-%d %H:%M" .status.LastAttempt}} — {{.status.LastError}} {{else}} {{strftime "%Y-%m-%d %H:%M" .status.LastAttempt}} — success {{end}}

Recommended while testing a new configuration.
Comma-separated. Include a wildcard entry (e.g. *.mail.example.com) alongside its bare domain to cover both with one certificate.
Cloudflare
AWS Route53
DigitalOcean
Google Cloud DNS
HTTP-01
Mode
{{if .statusHTTP.Enabled}} Enabled {{else}} Disabled {{end}}
Domains
{{if .statusHTTP.Domains}}{{range .statusHTTP.Domains}}{{.}} {{end}}{{else}}none configured{{end}}{{if .statusHTTP.IncludeIP}} + server IP{{end}}
Certificate expires
{{if .statusHTTP.NotAfter.IsZero}}unknown{{else}}{{strftime "%Y-%m-%d %H:%M" .statusHTTP.NotAfter}}{{end}}
Last attempt
{{if .statusHTTP.LastAttempt.IsZero}} none yet this run {{else if .statusHTTP.LastError}} {{strftime "%Y-%m-%d %H:%M" .statusHTTP.LastAttempt}} — {{.statusHTTP.LastError}} {{else}} {{strftime "%Y-%m-%d %H:%M" .statusHTTP.LastAttempt}} — success {{end}}

No DNS provider needed — Let's Encrypt verifies ownership by requesting a token over plain HTTP on this port. Once enabled and the server is restarted, this port stays bound for the life of the process (not just during an obtain) — so you can confirm your router/proxy port-forwarding actually reaches this host by browsing to it directly and expecting a plain "ok" response.
Comma-separated.
Adds the IP as a second identifier on the same certificate, so clients connecting by bare IP (no hostname) get a trusted cert too. This automatically switches to Let's Encrypt's "shortlived" certificate profile, the only one that currently allows IP identifiers — those certificates are valid for only about 6 days, so expect much more frequent renewals than the domain-only case (handled automatically by the existing renewal check).
{{end}} {{define "extra_js"}} {{end}}