Skip to content

Commit

Permalink
Merge pull request #113 from marun/4.2-unique-ca-serial
Browse files Browse the repository at this point in the history
[release-4.2] Bug 1810421: Ensure service CA certs are created with unique serial numbers
  • Loading branch information
openshift-merge-robot committed Mar 19, 2020
2 parents 0324055 + e4fdd99 commit 9947ab9
Show file tree
Hide file tree
Showing 65 changed files with 401 additions and 3,649 deletions.
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

0 comments on commit 9947ab9

Please sign in to comment.