kube: sign with all active certificates

This commit is contained in:
Mikaël Cluseau
2026-07-17 11:13:48 +02:00
parent 69286c10db
commit 6f9271ff9c
+32 -6
View File
@@ -1,6 +1,7 @@
package main package main
import ( import (
"bytes"
"errors" "errors"
"fmt" "fmt"
"log" "log"
@@ -12,7 +13,9 @@ import (
"github.com/cloudflare/cfssl/config" "github.com/cloudflare/cfssl/config"
"github.com/cloudflare/cfssl/csr" "github.com/cloudflare/cfssl/csr"
"github.com/cloudflare/cfssl/helpers"
"github.com/cloudflare/cfssl/signer" "github.com/cloudflare/cfssl/signer"
"github.com/cloudflare/cfssl/signer/local"
restful "github.com/emicklei/go-restful" restful "github.com/emicklei/go-restful"
"novit.tech/direktil/local-server/pkg/mime" "novit.tech/direktil/local-server/pkg/mime"
@@ -221,15 +224,23 @@ func wsClusterKubeCASign(req *restful.Request, resp *restful.Response) {
return return
} }
caSigner, err := ca.Signer(&config.Signing{ caKey, err := ca.ParseKey()
if err != nil {
wsError(resp, err)
return
}
caCerts, err := helpers.ParseCertificatesPEM(ca.Cert)
if err != nil {
wsError(resp, err)
return
}
signingProfile := &config.Signing{
Default: &config.SigningProfile{ Default: &config.SigningProfile{
Usage: []string{"client auth"}, Usage: []string{"client auth"},
Expiry: notAfter.Sub(now), Expiry: notAfter.Sub(now),
}, },
})
if err != nil {
wsError(resp, err)
return
} }
csr := signer.SignRequest{ csr := signer.SignRequest{
@@ -242,13 +253,28 @@ func wsClusterKubeCASign(req *restful.Request, resp *restful.Response) {
NotAfter: notAfter, NotAfter: notAfter,
} }
var certPEMs [][]byte
for _, caCert := range caCerts {
if caCert.NotAfter.Before(now) {
continue
}
caSigner, err := local.NewSigner(caKey, caCert, signer.DefaultSigAlgo(caKey), signingProfile)
if err != nil {
wsError(resp, err)
return
}
cert, err := caSigner.Sign(csr) cert, err := caSigner.Sign(csr)
if err != nil { if err != nil {
wsError(resp, err) wsError(resp, err)
return return
} }
resp.Write(cert) certPEMs = append(certPEMs, cert)
}
resp.Write(bytes.Join(certPEMs, nil))
} }
func parseCertDurationRange(d string, now time.Time) (notBefore, notAfter time.Time, err error) { func parseCertDurationRange(d string, now time.Time) (notBefore, notAfter time.Time, err error) {