@@ -80,7 +80,7 @@ func (c RotatedSigningCASecret) EnsureSigningCertKeyPair(ctx context.Context) (*
80
80
81
81
// run Update if metadata needs changing unless we're in RefreshOnlyWhenExpired mode
82
82
if ! c .RefreshOnlyWhenExpired {
83
- needsMetadataUpdate := ensureMetadataUpdate (signingCertKeyPairSecret , c .Owner , c .AdditionalAnnotations )
83
+ needsMetadataUpdate := ensureOwnerRefAndTLSAnnotations (signingCertKeyPairSecret , c .Owner , c .AdditionalAnnotations )
84
84
needsTypeChange := ensureSecretTLSTypeSet (signingCertKeyPairSecret )
85
85
updateRequired = needsMetadataUpdate || needsTypeChange
86
86
}
@@ -92,7 +92,7 @@ func (c RotatedSigningCASecret) EnsureSigningCertKeyPair(ctx context.Context) (*
92
92
reason = "secret doesn't exist"
93
93
}
94
94
c .EventRecorder .Eventf ("SignerUpdateRequired" , "%q in %q requires a new signing cert/key pair: %v" , c .Name , c .Namespace , reason )
95
- if err := setSigningCertKeyPairSecret (signingCertKeyPairSecret , c .Validity , c .AdditionalAnnotations ); err != nil {
95
+ if err = setSigningCertKeyPairSecretAndTLSAnnotations (signingCertKeyPairSecret , c .Validity , c .AdditionalAnnotations ); err != nil {
96
96
return nil , false , err
97
97
}
98
98
@@ -199,18 +199,30 @@ func getValidityFromAnnotations(annotations map[string]string) (notBefore time.T
199
199
return notBefore , notAfter , ""
200
200
}
201
201
202
+ // setSigningCertKeyPairSecretAndTLSAnnotations generates a new signing certificate and key pair,
203
+ // stores them in the specified secret, and adds predefined TLS annotations to that secret.
204
+ func setSigningCertKeyPairSecretAndTLSAnnotations (signingCertKeyPairSecret * corev1.Secret , validity time.Duration , tlsAnnotations AdditionalAnnotations ) error {
205
+ ca , err := setSigningCertKeyPairSecret (signingCertKeyPairSecret , validity )
206
+ if err != nil {
207
+ return err
208
+ }
209
+
210
+ setTLSAnnotationsOnSigningCertKeyPairSecret (signingCertKeyPairSecret , ca , tlsAnnotations )
211
+ return nil
212
+ }
213
+
202
214
// setSigningCertKeyPairSecret creates a new signing cert/key pair and sets them in the secret
203
- func setSigningCertKeyPairSecret (signingCertKeyPairSecret * corev1.Secret , validity time.Duration , annotations AdditionalAnnotations ) error {
215
+ func setSigningCertKeyPairSecret (signingCertKeyPairSecret * corev1.Secret , validity time.Duration ) ( * crypto. TLSCertificateConfig , error ) {
204
216
signerName := fmt .Sprintf ("%s_%s@%d" , signingCertKeyPairSecret .Namespace , signingCertKeyPairSecret .Name , time .Now ().Unix ())
205
217
ca , err := crypto .MakeSelfSignedCAConfigForDuration (signerName , validity )
206
218
if err != nil {
207
- return err
219
+ return nil , err
208
220
}
209
221
210
222
certBytes := & bytes.Buffer {}
211
223
keyBytes := & bytes.Buffer {}
212
- if err : = ca .WriteCertConfig (certBytes , keyBytes ); err != nil {
213
- return err
224
+ if err = ca .WriteCertConfig (certBytes , keyBytes ); err != nil {
225
+ return nil , err
214
226
}
215
227
216
228
if signingCertKeyPairSecret .Annotations == nil {
@@ -221,11 +233,20 @@ func setSigningCertKeyPairSecret(signingCertKeyPairSecret *corev1.Secret, validi
221
233
}
222
234
signingCertKeyPairSecret .Data ["tls.crt" ] = certBytes .Bytes ()
223
235
signingCertKeyPairSecret .Data ["tls.key" ] = keyBytes .Bytes ()
224
- annotations .NotBefore = ca .Certs [0 ].NotBefore .Format (time .RFC3339 )
225
- annotations .NotAfter = ca .Certs [0 ].NotAfter .Format (time .RFC3339 )
226
- signingCertKeyPairSecret .Annotations [CertificateIssuer ] = ca .Certs [0 ].Issuer .CommonName
236
+ return ca , nil
237
+ }
227
238
228
- _ = annotations .EnsureTLSMetadataUpdate (& signingCertKeyPairSecret .ObjectMeta )
239
+ // setTLSAnnotationsOnSigningCertKeyPairSecret applies predefined TLS annotations to the given secret.
240
+ //
241
+ // This function does not perform nil checks on its parameters and assumes that the
242
+ // secret's Annotations field has already been initialized.
243
+ //
244
+ // These assumptions are safe because this function is only called after the secret
245
+ // has been initialized in setSigningCertKeyPairSecret.
246
+ func setTLSAnnotationsOnSigningCertKeyPairSecret (signingCertKeyPairSecret * corev1.Secret , ca * crypto.TLSCertificateConfig , tlsAnnotations AdditionalAnnotations ) {
247
+ signingCertKeyPairSecret .Annotations [CertificateIssuer ] = ca .Certs [0 ].Issuer .CommonName
229
248
230
- return nil
249
+ tlsAnnotations .NotBefore = ca .Certs [0 ].NotBefore .Format (time .RFC3339 )
250
+ tlsAnnotations .NotAfter = ca .Certs [0 ].NotAfter .Format (time .RFC3339 )
251
+ _ = tlsAnnotations .EnsureTLSMetadataUpdate (& signingCertKeyPairSecret .ObjectMeta )
231
252
}
0 commit comments