38 lines
1.4 KiB
Go
38 lines
1.4 KiB
Go
// Package sign implements a zone signer as a plugin.
|
|
package sign
|
|
|
|
import (
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
// Sign contains signers that sign the zones files.
|
|
type Sign struct {
|
|
signers []*Signer
|
|
}
|
|
|
|
// OnStartup scans all signers and signs or resigns zones if needed.
|
|
func (s *Sign) OnStartup() error {
|
|
for _, signer := range s.signers {
|
|
why := signer.resign()
|
|
if why == nil {
|
|
log.Infof("Skipping signing zone %q in %q: signatures are valid", signer.origin, filepath.Join(signer.directory, signer.signedfile))
|
|
continue
|
|
}
|
|
go signAndLog(signer, why)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Various duration constants for signing of the zones.
|
|
const (
|
|
durationExpireDays = 7 * 24 * time.Hour // max time allowed before expiration
|
|
durationResignDays = 6 * 24 * time.Hour // if the last sign happened this long ago, sign again
|
|
durationSignatureExpireDays = 32 * 24 * time.Hour // sign for 32 days
|
|
durationRefreshHours = 5 * time.Hour // check zones every 5 hours
|
|
durationInceptionJitter = -18 * time.Hour // default max jitter for the inception
|
|
durationExpirationDayJitter = 5 * 24 * time.Hour // default max jitter for the expiration
|
|
durationSignatureInceptionHours = -3 * time.Hour // -(2+1) hours, be sure to catch daylight saving time and such, jitter is subtracted
|
|
)
|
|
|
|
const timeFmt = "2006-01-02T15:04:05.000Z07:00"
|