-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Description
When config is reloaded with a changed acme issuer, certmagic will check for the existence of the certificate of created from the new issuer next time certificate should be issued. These certificates don't exist because we want to use them to be created in the first place. certmagic will try in vain for 30 days to renew these certificates.
Detailed explanation:
When caddy is starting, a global tls cache is created if needed
Lines 158 to 164 in a1751ad
| certCacheMu.Lock() | |
| if certCache == nil { | |
| certCache = certmagic.NewCache(cacheOpts) | |
| } else { | |
| certCache.SetOptions(cacheOpts) | |
| } | |
| certCacheMu.Unlock() |
it will be destroyed if tls is not used anymore
Lines 424 to 430 in a1751ad
| } else { | |
| // no more TLS app running, so delete in-memory cert cache | |
| certCache.Stop() | |
| certCacheMu.Lock() | |
| certCache = nil | |
| certCacheMu.Unlock() | |
| } |
TLS cache will start renewing certificates in the background
https://github.com/caddyserver/certmagic/blob/3fcd710c0cfc6d80026011c8ef9b0d7e94860b2b/cache.go#L127
Managed domains are updated through caddy configuration.
Eventually, renewal will be done here
TLS cache will try to renew the certificate using the latest issuer url, but first it will check the existence of the old certificate:
It doesn't exist because the old certificate if from a different issuer and the path checked is from the latest issuer.
This will be retried here
There are at least two ways to fix this: to restart caddy or remove the active caddy configuration and reload it so that caddy will realize these certificates don't exist and should be created instead.