Skip to content

Commit 3d3c336

Browse files
committed
fix
Signed-off-by: tiansuo <[email protected]>
1 parent 54ac317 commit 3d3c336

File tree

5 files changed

+380
-334
lines changed

5 files changed

+380
-334
lines changed

pkg/karmadactl/cmdinit/cert/cert.go

Lines changed: 79 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ func GeneratePrivateKey(keyType x509.PublicKeyAlgorithm) (crypto.Signer, error)
7272

7373
// CertsConfig is a wrapper around certutil.Config extending it with PublicKeyAlgorithm.
7474
type CertsConfig struct {
75-
certutil.Config
76-
NotAfter *time.Time
77-
PublicKeyAlgorithm x509.PublicKeyAlgorithm
75+
certutil.Config
76+
NotAfter *time.Time
77+
PublicKeyAlgorithm x509.PublicKeyAlgorithm
7878
}
7979

8080
// EncodeCertPEM returns PEM-encoded certificate data
@@ -257,15 +257,15 @@ func WriteCertAndKey(pkiPath, pkiName string, ca *x509.Certificate, key *crypto.
257257

258258
// NewCertConfig create new CertConfig
259259
func NewCertConfig(cn string, org []string, altNames certutil.AltNames, notAfter *time.Time) *CertsConfig {
260-
return &CertsConfig{
261-
Config: certutil.Config{
262-
CommonName: cn,
263-
Organization: org,
264-
Usages: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},
265-
AltNames: altNames,
266-
},
267-
NotAfter: notAfter,
268-
}
260+
return &CertsConfig{
261+
Config: certutil.Config{
262+
CommonName: cn,
263+
Organization: org,
264+
Usages: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},
265+
AltNames: altNames,
266+
},
267+
NotAfter: notAfter,
268+
}
269269
}
270270

271271
// NewGenCerts generates a full set of certificates driven by certConfigMap and
@@ -278,73 +278,73 @@ func NewCertConfig(cn string, org []string, altNames certutil.AltNames, notAfter
278278
// - front-proxy-client -> front-proxy-ca
279279
// - others -> main CA
280280
func NewGenCerts(pkiPath, caCertFile, caKeyFile string, certConfigMap map[string]*CertsConfig) error {
281-
// Main CA (karmada CA)
282-
caCert, caKey, err := getCACertAndKey(caCertFile, caKeyFile)
283-
if err != nil {
284-
return err
285-
}
286-
if err = WriteCertAndKey(pkiPath, globaloptions.CaCertAndKeyName, caCert, caKey); err != nil {
287-
return err
288-
}
289-
290-
// Front-proxy CA
291-
frontProxyCaCert, frontProxyCaKey, err := NewCACertAndKey(options.FrontProxyCaCertAndKeyName)
292-
if err != nil {
293-
return err
294-
}
295-
if err = WriteCertAndKey(pkiPath, options.FrontProxyCaCertAndKeyName, frontProxyCaCert, frontProxyCaKey); err != nil {
296-
return err
297-
}
298-
299-
// Etcd CA
300-
etcdCaCert, etcdCaKey, err := NewCACertAndKey(options.EtcdCaCertAndKeyName)
301-
if err != nil {
302-
return err
303-
}
304-
if err = WriteCertAndKey(pkiPath, options.EtcdCaCertAndKeyName, etcdCaCert, etcdCaKey); err != nil {
305-
return err
306-
}
307-
308-
// Choose signing CA by cert name
309-
for certName, certConfig := range certConfigMap {
310-
if certConfig == nil {
311-
continue
312-
}
313-
314-
var signerCACert *x509.Certificate
315-
var signerCAKey crypto.Signer
316-
317-
switch certName {
318-
// etcd server/client and all etcd-client variants should be signed by etcd-ca
319-
case options.EtcdServerCertAndKeyName,
320-
options.EtcdClientCertAndKeyName,
321-
options.KarmadaApiServerEtcdClientCertAndKeyName,
322-
options.KarmadaAggregatedApiServerEtcdClientCertAndKeyName,
323-
options.KarmadaSearchEtcdClientCertAndKeyName:
324-
signerCACert = etcdCaCert
325-
signerCAKey = *etcdCaKey
326-
327-
// front-proxy client should be signed by front-proxy-ca
328-
case options.FrontProxyClientCertAndKeyName:
329-
signerCACert = frontProxyCaCert
330-
signerCAKey = *frontProxyCaKey
331-
332-
// default: signed by main karmada CA
333-
default:
334-
signerCACert = caCert
335-
signerCAKey = *caKey
336-
}
337-
338-
cert, key, err := NewCertAndKey(signerCACert, signerCAKey, certConfig)
339-
if err != nil {
340-
return err
341-
}
342-
if err = WriteCertAndKey(pkiPath, certName, cert, &key); err != nil {
343-
return err
344-
}
345-
}
346-
347-
return nil
281+
// Main CA (karmada CA)
282+
caCert, caKey, err := getCACertAndKey(caCertFile, caKeyFile)
283+
if err != nil {
284+
return err
285+
}
286+
if err = WriteCertAndKey(pkiPath, globaloptions.CaCertAndKeyName, caCert, caKey); err != nil {
287+
return err
288+
}
289+
290+
// Front-proxy CA
291+
frontProxyCaCert, frontProxyCaKey, err := NewCACertAndKey(options.FrontProxyCaCertAndKeyName)
292+
if err != nil {
293+
return err
294+
}
295+
if err = WriteCertAndKey(pkiPath, options.FrontProxyCaCertAndKeyName, frontProxyCaCert, frontProxyCaKey); err != nil {
296+
return err
297+
}
298+
299+
// Etcd CA
300+
etcdCaCert, etcdCaKey, err := NewCACertAndKey(options.EtcdCaCertAndKeyName)
301+
if err != nil {
302+
return err
303+
}
304+
if err = WriteCertAndKey(pkiPath, options.EtcdCaCertAndKeyName, etcdCaCert, etcdCaKey); err != nil {
305+
return err
306+
}
307+
308+
// Choose signing CA by cert name
309+
for certName, certConfig := range certConfigMap {
310+
if certConfig == nil {
311+
continue
312+
}
313+
314+
var signerCACert *x509.Certificate
315+
var signerCAKey crypto.Signer
316+
317+
switch certName {
318+
// etcd server/client and all etcd-client variants should be signed by etcd-ca
319+
case options.EtcdServerCertAndKeyName,
320+
options.EtcdClientCertAndKeyName,
321+
options.KarmadaAPIServerEtcdClientCertAndKeyName,
322+
options.KarmadaAggregatedAPIServerEtcdClientCertAndKeyName,
323+
options.KarmadaSearchEtcdClientCertAndKeyName:
324+
signerCACert = etcdCaCert
325+
signerCAKey = *etcdCaKey
326+
327+
// front-proxy client should be signed by front-proxy-ca
328+
case options.FrontProxyClientCertAndKeyName:
329+
signerCACert = frontProxyCaCert
330+
signerCAKey = *frontProxyCaKey
331+
332+
// default: signed by main karmada CA
333+
default:
334+
signerCACert = caCert
335+
signerCAKey = *caKey
336+
}
337+
338+
cert, key, err := NewCertAndKey(signerCACert, signerCAKey, certConfig)
339+
if err != nil {
340+
return err
341+
}
342+
if err = WriteCertAndKey(pkiPath, certName, cert, &key); err != nil {
343+
return err
344+
}
345+
}
346+
347+
return nil
348348
}
349349

350350
// GenCerts Create CA certificate and sign etcd karmada certificate.

pkg/karmadactl/cmdinit/cert/cert_test.go

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,24 @@ limitations under the License.
1717
package cert
1818

1919
import (
20-
"crypto/sha256"
21-
"crypto/x509"
22-
"encoding/pem"
23-
"fmt"
24-
"io"
25-
"net"
26-
"os"
27-
"path/filepath"
28-
"testing"
29-
"time"
30-
31-
certutil "k8s.io/client-go/util/cert"
32-
"k8s.io/klog/v2"
33-
34-
initopt "github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/options"
35-
globalopt "github.com/karmada-io/karmada/pkg/karmadactl/options"
36-
"github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/utils"
37-
"github.com/karmada-io/karmada/pkg/util/names"
20+
"crypto/sha256"
21+
"crypto/x509"
22+
"encoding/pem"
23+
"fmt"
24+
"io"
25+
"net"
26+
"os"
27+
"path/filepath"
28+
"testing"
29+
"time"
30+
31+
certutil "k8s.io/client-go/util/cert"
32+
"k8s.io/klog/v2"
33+
34+
"github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/utils"
35+
initopt "github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/options"
36+
globalopt "github.com/karmada-io/karmada/pkg/karmadactl/options"
37+
"github.com/karmada-io/karmada/pkg/util/names"
3838
)
3939

4040
const (
@@ -189,67 +189,67 @@ func compareFiles(file1, file2 string) (bool, error) {
189189

190190
// compareCertFilesInDirs compares specific files in two directories to check if they are the same
191191
func compareCertFilesInDirs(dir1, dir2, filename string) (bool, error) {
192-
file1 := filepath.Join(dir1, filename)
193-
file2 := filepath.Join(dir2, filename)
194-
return compareFiles(file1, file2)
192+
file1 := filepath.Join(dir1, filename)
193+
file2 := filepath.Join(dir2, filename)
194+
return compareFiles(file1, file2)
195195
}
196196

197197
// helper: read certificate from dir/name.{crt}
198198
func readCertFromPath(t *testing.T, dir, name string) *x509.Certificate {
199-
t.Helper()
200-
b, err := os.ReadFile(filepath.Join(dir, fmt.Sprintf("%s.crt", name)))
201-
if err != nil {
202-
t.Fatalf("failed reading cert %s: %v", name, err)
203-
}
204-
blk, _ := pem.Decode(b)
205-
if blk == nil {
206-
t.Fatalf("failed decoding PEM for %s", name)
207-
}
208-
crt, err := x509.ParseCertificate(blk.Bytes)
209-
if err != nil {
210-
t.Fatalf("failed parsing x509 for %s: %v", name, err)
211-
}
212-
return crt
199+
t.Helper()
200+
b, err := os.ReadFile(filepath.Join(dir, fmt.Sprintf("%s.crt", name)))
201+
if err != nil {
202+
t.Fatalf("failed reading cert %s: %v", name, err)
203+
}
204+
blk, _ := pem.Decode(b)
205+
if blk == nil {
206+
t.Fatalf("failed decoding PEM for %s", name)
207+
}
208+
crt, err := x509.ParseCertificate(blk.Bytes)
209+
if err != nil {
210+
t.Fatalf("failed parsing x509 for %s: %v", name, err)
211+
}
212+
return crt
213213
}
214214

215215
// TestNewGenCerts_CASelection verifies certificates are signed by the expected CA
216216
// according to their names: etcd-* by etcd-ca, front-proxy-client by front-proxy-ca,
217217
// others by main CA.
218218
func TestNewGenCerts_CASelection(t *testing.T) {
219-
dir := t.TempDir()
220-
notAfter := time.Now().Add(Duration365d).UTC()
221-
222-
cfg := map[string]*CertsConfig{
223-
// main CA signer
224-
initopt.KarmadaApiServerCertAndKeyName: NewCertConfig(initopt.KarmadaApiServerCN, nil, certutil.AltNames{DNSNames: []string{"localhost"}, IPs: []net.IP{utils.StringToNetIP("127.0.0.1")}}, &notAfter),
225-
// front-proxy CA signer
226-
initopt.FrontProxyClientCertAndKeyName: NewCertConfig(initopt.KarmadaFrontProxyClientCN, nil, certutil.AltNames{}, &notAfter),
227-
// etcd CA signer
228-
initopt.KarmadaApiServerEtcdClientCertAndKeyName: NewCertConfig(initopt.KarmadaApiServerEtcdClientCN, nil, certutil.AltNames{}, &notAfter),
229-
}
230-
231-
if err := NewGenCerts(dir, "", "", cfg); err != nil {
232-
t.Fatalf("NewGenCerts error: %v", err)
233-
}
234-
235-
// load CA certs
236-
ca := readCertFromPath(t, dir, globalopt.CaCertAndKeyName)
237-
etcdCA := readCertFromPath(t, dir, initopt.EtcdCaCertAndKeyName)
238-
fpCA := readCertFromPath(t, dir, initopt.FrontProxyCaCertAndKeyName)
239-
240-
cases := []struct{
241-
name string
242-
expected string
243-
}{
244-
{initopt.KarmadaApiServerCertAndKeyName, ca.Subject.CommonName},
245-
{initopt.FrontProxyClientCertAndKeyName, fpCA.Subject.CommonName},
246-
{initopt.KarmadaApiServerEtcdClientCertAndKeyName, etcdCA.Subject.CommonName},
247-
}
248-
249-
for _, tc := range cases {
250-
crt := readCertFromPath(t, dir, tc.name)
251-
if got := crt.Issuer.CommonName; got != tc.expected {
252-
t.Fatalf("%s issuer CN = %q, want %q", tc.name, got, tc.expected)
253-
}
254-
}
219+
dir := t.TempDir()
220+
notAfter := time.Now().Add(Duration365d).UTC()
221+
222+
cfg := map[string]*CertsConfig{
223+
// main CA signer
224+
initopt.KarmadaAPIServerCertAndKeyName: NewCertConfig(initopt.KarmadaAPIServerCN, nil, certutil.AltNames{DNSNames: []string{"localhost"}, IPs: []net.IP{utils.StringToNetIP("127.0.0.1")}}, &notAfter),
225+
// front-proxy CA signer
226+
initopt.FrontProxyClientCertAndKeyName: NewCertConfig(initopt.KarmadaFrontProxyClientCN, nil, certutil.AltNames{}, &notAfter),
227+
// etcd CA signer
228+
initopt.KarmadaAPIServerEtcdClientCertAndKeyName: NewCertConfig(initopt.KarmadaAPIServerEtcdClientCN, nil, certutil.AltNames{}, &notAfter),
229+
}
230+
231+
if err := NewGenCerts(dir, "", "", cfg); err != nil {
232+
t.Fatalf("NewGenCerts error: %v", err)
233+
}
234+
235+
// load CA certs
236+
ca := readCertFromPath(t, dir, globalopt.CaCertAndKeyName)
237+
etcdCA := readCertFromPath(t, dir, initopt.EtcdCaCertAndKeyName)
238+
fpCA := readCertFromPath(t, dir, initopt.FrontProxyCaCertAndKeyName)
239+
240+
cases := []struct {
241+
name string
242+
expected string
243+
}{
244+
{initopt.KarmadaAPIServerCertAndKeyName, ca.Subject.CommonName},
245+
{initopt.FrontProxyClientCertAndKeyName, fpCA.Subject.CommonName},
246+
{initopt.KarmadaAPIServerEtcdClientCertAndKeyName, etcdCA.Subject.CommonName},
247+
}
248+
249+
for _, tc := range cases {
250+
crt := readCertFromPath(t, dir, tc.name)
251+
if got := crt.Issuer.CommonName; got != tc.expected {
252+
t.Fatalf("%s issuer CN = %q, want %q", tc.name, got, tc.expected)
253+
}
254+
}
255255
}

0 commit comments

Comments
 (0)