Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tls: add reuse_private_keys #6025

Merged
merged 1 commit into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions caddyconfig/httpcaddyfile/builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func parseBind(h Helper) ([]ConfigValue, error) {
// dns_ttl <duration>
// dns_challenge_override_domain <domain>
// on_demand
// reuse_private_keys
// eab <key_id> <mac_key>
// issuer <module_name> [...]
// get_certificate <module_name> [...]
Expand All @@ -106,6 +107,7 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
var issuers []certmagic.Issuer
var certManagers []certmagic.Manager
var onDemand bool
var reusePrivateKeys bool

for h.Next() {
// file certificate loader
Expand Down Expand Up @@ -483,6 +485,12 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
}
onDemand = true

case "reuse_private_keys":
if h.NextArg() {
return nil, h.ArgErr()
}
reusePrivateKeys = true

case "insecure_secrets_log":
if !h.NextArg() {
return nil, h.ArgErr()
Expand Down Expand Up @@ -589,6 +597,14 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
})
}

// reuse private keys TLS
if reusePrivateKeys {
configVals = append(configVals, ConfigValue{
Class: "tls.reuse_private_keys",
Value: true,
})
}

// custom certificate selection
if len(certSelector.AnyTag) > 0 {
cp.CertSelection = &certSelector
Expand Down
6 changes: 6 additions & 0 deletions caddyconfig/httpcaddyfile/tlsapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,11 @@ func (st ServerType) buildTLSApp(
ap.OnDemand = true
}

// reuse private keys tls
if _, ok := sblock.pile["tls.reuse_private_keys"]; ok {
ap.ReusePrivateKeys = true
}

if keyTypeVals, ok := sblock.pile["tls.key_type"]; ok {
ap.KeyType = keyTypeVals[0].Value.(string)
}
Expand Down Expand Up @@ -587,6 +592,7 @@ outer:
aps[i].MustStaple == aps[j].MustStaple &&
aps[i].KeyType == aps[j].KeyType &&
aps[i].OnDemand == aps[j].OnDemand &&
aps[i].ReusePrivateKeys == aps[j].ReusePrivateKeys &&
aps[i].RenewalWindowRatio == aps[j].RenewalWindowRatio {
if len(aps[i].SubjectsRaw) > 0 && len(aps[j].SubjectsRaw) == 0 {
// later policy (at j) has no subjects ("catch-all"), so we can
Expand Down
10 changes: 10 additions & 0 deletions modules/caddytls/automation.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,15 @@ type AutomationPolicy struct {
// load. This enables On-Demand TLS for this policy.
OnDemand bool `json:"on_demand,omitempty"`

// If true, private keys already existing in storage
// will be reused. Otherwise, a new key will be
// created for every new certificate to mitigate
// pinning and reduce the scope of key compromise.
mholt marked this conversation as resolved.
Show resolved Hide resolved
// TEMPORARY: Key pinning is against industry best practices.
// This property will likely be removed in the future.
// Do not rely on it forever; watch the release notes.
ReusePrivateKeys bool `json:"reuse_private_keys,omitempty"`

// Disables OCSP stapling. Disabling OCSP stapling puts clients at
// greater risk, reduces their privacy, and usually lowers client
// performance. It is NOT recommended to disable this unless you
Expand Down Expand Up @@ -288,6 +297,7 @@ func (ap *AutomationPolicy) Provision(tlsApp *TLS) error {
KeySource: keySource,
OnEvent: tlsApp.onEvent,
OnDemand: ond,
ReusePrivateKeys: ap.ReusePrivateKeys,
OCSP: certmagic.OCSPConfig{
DisableStapling: ap.DisableOCSPStapling,
ResponderOverrides: ap.OCSPOverrides,
Expand Down
Loading