tls: add reuse_private_keys (#6025)

This commit is contained in:
Rithvik Vibhu 2024-01-10 04:30:31 +05:30 committed by GitHub
parent d9ff7b1872
commit ed41c924cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 0 deletions

View File

@ -90,6 +90,7 @@ func parseBind(h Helper) ([]ConfigValue, error) {
// dns_ttl <duration> // dns_ttl <duration>
// dns_challenge_override_domain <domain> // dns_challenge_override_domain <domain>
// on_demand // on_demand
// reuse_private_keys
// eab <key_id> <mac_key> // eab <key_id> <mac_key>
// issuer <module_name> [...] // issuer <module_name> [...]
// get_certificate <module_name> [...] // get_certificate <module_name> [...]
@ -106,6 +107,7 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
var issuers []certmagic.Issuer var issuers []certmagic.Issuer
var certManagers []certmagic.Manager var certManagers []certmagic.Manager
var onDemand bool var onDemand bool
var reusePrivateKeys bool
for h.Next() { for h.Next() {
// file certificate loader // file certificate loader
@ -483,6 +485,12 @@ func parseTLS(h Helper) ([]ConfigValue, error) {
} }
onDemand = true onDemand = true
case "reuse_private_keys":
if h.NextArg() {
return nil, h.ArgErr()
}
reusePrivateKeys = true
case "insecure_secrets_log": case "insecure_secrets_log":
if !h.NextArg() { if !h.NextArg() {
return nil, h.ArgErr() return nil, h.ArgErr()
@ -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 // custom certificate selection
if len(certSelector.AnyTag) > 0 { if len(certSelector.AnyTag) > 0 {
cp.CertSelection = &certSelector cp.CertSelection = &certSelector

View File

@ -118,6 +118,11 @@ func (st ServerType) buildTLSApp(
ap.OnDemand = true 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 { if keyTypeVals, ok := sblock.pile["tls.key_type"]; ok {
ap.KeyType = keyTypeVals[0].Value.(string) ap.KeyType = keyTypeVals[0].Value.(string)
} }
@ -587,6 +592,7 @@ outer:
aps[i].MustStaple == aps[j].MustStaple && aps[i].MustStaple == aps[j].MustStaple &&
aps[i].KeyType == aps[j].KeyType && aps[i].KeyType == aps[j].KeyType &&
aps[i].OnDemand == aps[j].OnDemand && aps[i].OnDemand == aps[j].OnDemand &&
aps[i].ReusePrivateKeys == aps[j].ReusePrivateKeys &&
aps[i].RenewalWindowRatio == aps[j].RenewalWindowRatio { aps[i].RenewalWindowRatio == aps[j].RenewalWindowRatio {
if len(aps[i].SubjectsRaw) > 0 && len(aps[j].SubjectsRaw) == 0 { if len(aps[i].SubjectsRaw) > 0 && len(aps[j].SubjectsRaw) == 0 {
// later policy (at j) has no subjects ("catch-all"), so we can // later policy (at j) has no subjects ("catch-all"), so we can

View File

@ -138,6 +138,15 @@ type AutomationPolicy struct {
// load. This enables On-Demand TLS for this policy. // load. This enables On-Demand TLS for this policy.
OnDemand bool `json:"on_demand,omitempty"` 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.
// 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 // Disables OCSP stapling. Disabling OCSP stapling puts clients at
// greater risk, reduces their privacy, and usually lowers client // greater risk, reduces their privacy, and usually lowers client
// performance. It is NOT recommended to disable this unless you // performance. It is NOT recommended to disable this unless you
@ -288,6 +297,7 @@ func (ap *AutomationPolicy) Provision(tlsApp *TLS) error {
KeySource: keySource, KeySource: keySource,
OnEvent: tlsApp.onEvent, OnEvent: tlsApp.onEvent,
OnDemand: ond, OnDemand: ond,
ReusePrivateKeys: ap.ReusePrivateKeys,
OCSP: certmagic.OCSPConfig{ OCSP: certmagic.OCSPConfig{
DisableStapling: ap.DisableOCSPStapling, DisableStapling: ap.DisableOCSPStapling,
ResponderOverrides: ap.OCSPOverrides, ResponderOverrides: ap.OCSPOverrides,