Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions pkg/operator/rotate.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"crypto/x509"
"encoding/json"
"fmt"
"math/big"
"time"

corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -197,6 +198,19 @@ func createIntermediateCACert(targetCACert, signingCACert *x509.Certificate, sig
// Enable key identity chaining
template.AuthorityKeyId = signingCACert.SubjectKeyId

// Set a new serial number so that the intermediate CA cert is
// differentiated from the target CA cert. This ensures that a serving
// cert bundle that includes the issuing CA cert and an intermediate CA
// cert generated by this function - with the issuing CA cert as the
// target and the previous CA as the signer - will not result in
// SEC_ERROR_REUSED_ISSUER_AND_SERIAL when read by applications like curl.
serialGenerator := crypto.RandomSerialGenerator{}
serial, err := serialGenerator.Next(template)
if err != nil {
return nil, fmt.Errorf("failed to find next serial number: %v", err)
}
template.SerialNumber = big.NewInt(serial)

// Update the expiry if necessary
if expiry != nil {
template.NotAfter = *expiry
Expand Down
32 changes: 32 additions & 0 deletions pkg/operator/rotate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,3 +245,35 @@ func TestRotateSigningCA(t *testing.T) {
dnsName := oldServingCert.Certs[0].Subject.CommonName
util.CheckRotation(t, dnsName, oldCertPEM, oldKeyPEM, oldBundlePEM, newCertPEM, newKeyPEM, newBundlePEM)
}

// TestCreateIntermediateCACert checks that the intermediate CA cert
// created by signing a target CA cert supports identity key chaining
// and uses a serial number distinct from that of the target CA cert.
func TestCreateIntermediateCACert(t *testing.T) {
// Create the signing CA
signingCAConfig, err := crypto.MakeSelfSignedCAConfig("foo", signingCertificateLifetimeInDays)
if err != nil {
t.Fatalf("error generating a new ca: %v", err)
}
signingCACert := signingCAConfig.Certs[0]

// Create the CA targeted for signing
targetCAConfig, err := crypto.MakeSelfSignedCAConfig("foo", signingCertificateLifetimeInDays)
if err != nil {
t.Fatalf("error generating a new ca: %v", err)
}
targetCACert := targetCAConfig.Certs[0]

intermediateCACert, err := createIntermediateCACert(targetCACert, signingCACert, signingCAConfig.Key.(*rsa.PrivateKey), nil)
if err != nil {
t.Fatalf("Failed to create intermediate CA cert: %v", err)
}

if bytes.Compare(intermediateCACert.AuthorityKeyId, signingCACert.SubjectKeyId) != 0 {
t.Fatalf("Expected intermediate CA cert AuthorityKeyId to match signing CA cert SubjectKeyId")
}

if intermediateCACert.SerialNumber.Cmp(targetCACert.SerialNumber) == 0 {
t.Fatalf("Expected intermediate CA cert serial number to differ from serial number of target CA cert")
}
}
6 changes: 3 additions & 3 deletions vendor/github.com/evanphx/json-patch/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 0 additions & 5 deletions vendor/github.com/evanphx/json-patch/go.mod

This file was deleted.

2 changes: 0 additions & 2 deletions vendor/github.com/evanphx/json-patch/go.sum

This file was deleted.

6 changes: 4 additions & 2 deletions vendor/github.com/evanphx/json-patch/merge.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 0 additions & 40 deletions vendor/github.com/evanphx/json-patch/merge_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading