Skip to content

Commit ca483cf

Browse files
authored
Merge pull request #1948 from stephenbradshaw/v1.5.x/master
Backport "restrict operator certificates to SHA256 to fix grpcio bugs" to V1.5.x/master
2 parents 3ce5cee + adb4d03 commit ca483cf

File tree

5 files changed

+14
-8
lines changed

5 files changed

+14
-8
lines changed

server/certs/ca.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func GenerateCertificateAuthority(caType string, commonName string) (*x509.Certi
6060
certFilePath := filepath.Join(storageDir, fmt.Sprintf("%s-ca-cert.pem", caType))
6161
if _, err := os.Stat(certFilePath); os.IsNotExist(err) {
6262
certsLog.Infof("Generating certificate authority for '%s'", caType)
63-
cert, key := GenerateECCCertificate(caType, commonName, true, false)
63+
cert, key := GenerateECCCertificate(caType, commonName, true, false, false)
6464
SaveCertificateAuthority(caType, cert, key)
6565
}
6666
cert, key, err := GetCertificateAuthority(caType)

server/certs/certs.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,21 @@ func RemoveCertificate(caType string, keyType string, commonName string) error {
135135
// GenerateECCCertificate - Generate a TLS certificate with the given parameters
136136
// We choose some reasonable defaults like Curve, Key Size, ValidFor, etc.
137137
// Returns two strings `cert` and `key` (PEM Encoded).
138-
func GenerateECCCertificate(caType string, commonName string, isCA bool, isClient bool) ([]byte, []byte) {
138+
func GenerateECCCertificate(caType string, commonName string, isCA bool, isClient bool, isOperator bool) ([]byte, []byte) {
139139

140140
certsLog.Infof("Generating TLS certificate (ECC) for '%s' ...", commonName)
141141

142142
var privateKey interface{}
143143
var err error
144144

145145
// Generate private key
146-
curves := []elliptic.Curve{elliptic.P521(), elliptic.P384(), elliptic.P256()}
146+
var curves []elliptic.Curve
147+
if isOperator {
148+
curves = []elliptic.Curve{elliptic.P256()}
149+
} else {
150+
curves = []elliptic.Curve{elliptic.P521(), elliptic.P384(), elliptic.P256()}
151+
}
152+
147153
curve := curves[randomInt(len(curves))]
148154
privateKey, err = ecdsa.GenerateKey(curve, rand.Reader)
149155
if err != nil {

server/certs/mtls.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ const (
2626

2727
// MtlsC2ServerGenerateECCCertificate - Generate a server certificate signed with a given CA
2828
func MtlsC2ServerGenerateECCCertificate(host string) ([]byte, []byte, error) {
29-
cert, key := GenerateECCCertificate(MtlsServerCA, host, false, false)
29+
cert, key := GenerateECCCertificate(MtlsServerCA, host, false, false, false)
3030
err := saveCertificate(MtlsServerCA, ECCKey, host, cert, key)
3131
return cert, key, err
3232
}
3333

3434
// MtlsC2ImplantGenerateECCCertificate - Generate a server certificate signed with a given CA
3535
func MtlsC2ImplantGenerateECCCertificate(name string) ([]byte, []byte, error) {
36-
cert, key := GenerateECCCertificate(MtlsImplantCA, name, false, true)
36+
cert, key := GenerateECCCertificate(MtlsImplantCA, name, false, true, false)
3737
err := saveCertificate(MtlsImplantCA, ECCKey, name, cert, key)
3838
return cert, key, err
3939
}

server/certs/operators.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const (
3737

3838
// OperatorClientGenerateCertificate - Generate a certificate signed with a given CA
3939
func OperatorClientGenerateCertificate(operator string) ([]byte, []byte, error) {
40-
cert, key := GenerateECCCertificate(OperatorCA, operator, false, true)
40+
cert, key := GenerateECCCertificate(OperatorCA, operator, false, true, true)
4141
err := saveCertificate(OperatorCA, ECCKey, fmt.Sprintf("%s.%s", clientNamespace, operator), cert, key)
4242
return cert, key, err
4343
}
@@ -59,7 +59,7 @@ func OperatorServerGetCertificate(hostname string) ([]byte, []byte, error) {
5959

6060
// OperatorServerGenerateCertificate - Generate a certificate signed with a given CA
6161
func OperatorServerGenerateCertificate(hostname string) ([]byte, []byte, error) {
62-
cert, key := GenerateECCCertificate(OperatorCA, hostname, false, false)
62+
cert, key := GenerateECCCertificate(OperatorCA, hostname, false, false, true)
6363
err := saveCertificate(OperatorCA, ECCKey, fmt.Sprintf("%s.%s", serverNamespace, hostname), cert, key)
6464
return cert, key, err
6565
}

server/console/console-admin_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestRootOnlyVerifyCertificate(t *testing.T) {
3636
}
3737

3838
// Test with wrong CA
39-
wrongCert, _ := certs.GenerateECCCertificate(certs.HTTPSCA, "foobar", false, false)
39+
wrongCert, _ := certs.GenerateECCCertificate(certs.HTTPSCA, "foobar", false, false, false)
4040
block, _ = pem.Decode(wrongCert)
4141
err = clienttransport.RootOnlyVerifyCertificate(config.CACertificate, [][]byte{block.Bytes})
4242
if err == nil {

0 commit comments

Comments
 (0)