@@ -121,7 +121,7 @@ func (c RotatedSelfSignedCertKeySecret) EnsureTargetCertKeyPair(ctx context.Cont
121
121
122
122
if reason := c .CertCreator .NeedNewTargetCertKeyPair (targetCertKeyPairSecret , signingCertKeyPair , caBundleCerts , c .Refresh , c .RefreshOnlyWhenExpired , creationRequired ); len (reason ) > 0 {
123
123
c .EventRecorder .Eventf ("TargetUpdateRequired" , "%q in %q requires a new target cert/key pair: %v" , c .Name , c .Namespace , reason )
124
- if err := setTargetCertKeyPairSecret (targetCertKeyPairSecret , c .Validity , signingCertKeyPair , c .CertCreator , c .AdditionalAnnotations ); err != nil {
124
+ if err = setTargetCertKeyPairSecretAndTLSAnnotations (targetCertKeyPairSecret , c .Validity , signingCertKeyPair , c .CertCreator , c .AdditionalAnnotations ); err != nil {
125
125
return nil , err
126
126
}
127
127
@@ -232,9 +232,21 @@ func needNewTargetCertKeyPairForTime(annotations map[string]string, signer *cryp
232
232
return ""
233
233
}
234
234
235
+ // setTargetCertKeyPairSecretAndTLSAnnotations generates a new cert/key pair,
236
+ // stores them in the specified secret, and adds predefined TLS annotations to that secret.
237
+ func setTargetCertKeyPairSecretAndTLSAnnotations (targetCertKeyPairSecret * corev1.Secret , validity time.Duration , signer * crypto.CA , certCreator TargetCertCreator , tlsAnnotations AdditionalAnnotations ) error {
238
+ certKeyPair , err := setTargetCertKeyPairSecret (targetCertKeyPairSecret , validity , signer , certCreator )
239
+ if err != nil {
240
+ return err
241
+ }
242
+
243
+ setTLSAnnotationsOnTargetCertKeyPairSecret (targetCertKeyPairSecret , certKeyPair , certCreator , tlsAnnotations )
244
+ return nil
245
+ }
246
+
235
247
// setTargetCertKeyPairSecret creates a new cert/key pair and sets them in the secret. Only one of client, serving, or signer rotation may be specified.
236
248
// TODO refactor with an interface for actually signing and move the one-of check higher in the stack.
237
- func setTargetCertKeyPairSecret (targetCertKeyPairSecret * corev1.Secret , validity time.Duration , signer * crypto.CA , certCreator TargetCertCreator , annotations AdditionalAnnotations ) error {
249
+ func setTargetCertKeyPairSecret (targetCertKeyPairSecret * corev1.Secret , validity time.Duration , signer * crypto.CA , certCreator TargetCertCreator ) ( * crypto. TLSCertificateConfig , error ) {
238
250
if targetCertKeyPairSecret .Annotations == nil {
239
251
targetCertKeyPairSecret .Annotations = map [string ]string {}
240
252
}
@@ -251,21 +263,28 @@ func setTargetCertKeyPairSecret(targetCertKeyPairSecret *corev1.Secret, validity
251
263
252
264
certKeyPair , err := certCreator .NewCertificate (signer , targetValidity )
253
265
if err != nil {
254
- return err
266
+ return nil , err
255
267
}
256
268
257
269
targetCertKeyPairSecret .Data ["tls.crt" ], targetCertKeyPairSecret .Data ["tls.key" ], err = certKeyPair .GetPEMBytes ()
258
- if err != nil {
259
- return err
260
- }
261
- annotations .NotBefore = certKeyPair .Certs [0 ].NotBefore .Format (time .RFC3339 )
262
- annotations .NotAfter = certKeyPair .Certs [0 ].NotAfter .Format (time .RFC3339 )
270
+ return certKeyPair , err
271
+ }
272
+
273
+ // setTLSAnnotationsOnTargetCertKeyPairSecret applies predefined TLS annotations to the given secret.
274
+ //
275
+ // This function does not perform nil checks on its parameters and assumes that the
276
+ // secret's Annotations field has already been initialized.
277
+ //
278
+ // These assumptions are safe because this function is only called after the secret
279
+ // has been initialized in setTargetCertKeyPairSecret.
280
+ func setTLSAnnotationsOnTargetCertKeyPairSecret (targetCertKeyPairSecret * corev1.Secret , certKeyPair * crypto.TLSCertificateConfig , certCreator TargetCertCreator , tlsAnnotations AdditionalAnnotations ) {
263
281
targetCertKeyPairSecret .Annotations [CertificateIssuer ] = certKeyPair .Certs [0 ].Issuer .CommonName
264
282
265
- _ = annotations .EnsureTLSMetadataUpdate (& targetCertKeyPairSecret .ObjectMeta )
266
- certCreator .SetAnnotations (certKeyPair , targetCertKeyPairSecret .Annotations )
283
+ tlsAnnotations .NotBefore = certKeyPair .Certs [0 ].NotBefore .Format (time .RFC3339 )
284
+ tlsAnnotations .NotAfter = certKeyPair .Certs [0 ].NotAfter .Format (time .RFC3339 )
285
+ _ = tlsAnnotations .EnsureTLSMetadataUpdate (& targetCertKeyPairSecret .ObjectMeta )
267
286
268
- return nil
287
+ certCreator . SetAnnotations ( certKeyPair , targetCertKeyPairSecret . Annotations )
269
288
}
270
289
271
290
type ClientRotation struct {
0 commit comments