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
5 changes: 4 additions & 1 deletion pkg/asset/imagebased/configimage/ingressoperatorsigner.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ func (a *IngressOperatorSignerCertKey) Generate(ctx context.Context, dependencie
return err
}

a.KeyRaw = tls.PrivateKeyToPem(key)
a.KeyRaw, err = tls.PrivateKeyToPem(key)
if err != nil {
return fmt.Errorf("failed to encode private key to PEM: %w", err)
}
a.CertRaw = tls.CertToPem(crt)

return nil
Expand Down
10 changes: 5 additions & 5 deletions pkg/asset/tls/adminkubeconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ func (c *AdminKubeConfigSignerCertKey) Dependencies() []asset.Asset {
// Generate generates the root-ca key and cert pair.
func (c *AdminKubeConfigSignerCertKey) Generate(ctx context.Context, parents asset.Parents) error {
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "admin-kubeconfig-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityTenYears(),
IsCA: true,
Subject: pkix.Name{CommonName: "admin-kubeconfig-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityTenYears(),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "admin-kubeconfig-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "admin-kubeconfig-signer", nil)
}

// Load reads the asset files from disk.
Expand Down
20 changes: 10 additions & 10 deletions pkg/asset/tls/aggregator.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ func (a *AggregatorCA) Generate(ctx context.Context, dependencies asset.Parents)
dependencies.Get(installConfig)

cfg := &CertCfg{
Subject: pkix.Name{CommonName: "aggregator", OrganizationalUnit: []string{"bootkube"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityOneDay(installConfig),
IsCA: true,
Subject: pkix.Name{CommonName: "aggregator", OrganizationalUnit: []string{"bootkube"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityOneDay(installConfig),
IsCA: true,
}

return a.SelfSignedCertKey.Generate(ctx, cfg, "aggregator-ca")
return a.SelfSignedCertKey.Generate(ctx, cfg, "aggregator-ca", nil)
}

// Name returns the human-friendly name of the asset.
Expand Down Expand Up @@ -102,13 +102,13 @@ func (c *AggregatorSignerCertKey) Generate(ctx context.Context, parents asset.Pa
installConfig := &installconfig.InstallConfig{}
parents.Get(installConfig)
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "aggregator-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityOneDay(installConfig),
IsCA: true,
Subject: pkix.Name{CommonName: "aggregator-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityOneDay(installConfig),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "aggregator-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "aggregator-signer", nil)
}

// Name returns the human-friendly name of the asset.
Expand Down
40 changes: 20 additions & 20 deletions pkg/asset/tls/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ func (c *KubeAPIServerToKubeletSignerCertKey) Generate(ctx context.Context, pare
installConfig := &installconfig.InstallConfig{}
parents.Get(installConfig)
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "kube-apiserver-to-kubelet-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityOneYear(installConfig),
IsCA: true,
Subject: pkix.Name{CommonName: "kube-apiserver-to-kubelet-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityOneYear(installConfig),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-to-kubelet-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-to-kubelet-signer", nil)
}

// Name returns the human-friendly name of the asset.
Expand Down Expand Up @@ -124,13 +124,13 @@ func (c *KubeAPIServerLocalhostSignerCertKey) Dependencies() []asset.Asset {
// Generate generates the root-ca key and cert pair.
func (c *KubeAPIServerLocalhostSignerCertKey) Generate(ctx context.Context, parents asset.Parents) error {
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "kube-apiserver-localhost-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityTenYears(),
IsCA: true,
Subject: pkix.Name{CommonName: "kube-apiserver-localhost-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityTenYears(),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-localhost-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-localhost-signer", nil)
}

// Load reads the asset files from disk.
Expand Down Expand Up @@ -228,13 +228,13 @@ func (c *KubeAPIServerServiceNetworkSignerCertKey) Dependencies() []asset.Asset
// Generate generates the root-ca key and cert pair.
func (c *KubeAPIServerServiceNetworkSignerCertKey) Generate(ctx context.Context, parents asset.Parents) error {
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "kube-apiserver-service-network-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityTenYears(),
IsCA: true,
Subject: pkix.Name{CommonName: "kube-apiserver-service-network-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityTenYears(),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-service-network-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-service-network-signer", nil)
}

// Load reads the asset files from disk.
Expand Down Expand Up @@ -341,13 +341,13 @@ func (c *KubeAPIServerLBSignerCertKey) Dependencies() []asset.Asset {
// Generate generates the root-ca key and cert pair.
func (c *KubeAPIServerLBSignerCertKey) Generate(ctx context.Context, parents asset.Parents) error {
cfg := &CertCfg{
Subject: pkix.Name{CommonName: "kube-apiserver-lb-signer", OrganizationalUnit: []string{"openshift"}},
KeyUsages: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
Validity: ValidityTenYears(),
IsCA: true,
Subject: pkix.Name{CommonName: "kube-apiserver-lb-signer", OrganizationalUnit: []string{"openshift"}},
// KeyUsages is set by GenerateSelfSignedCertificate based on the key algorithm.
Validity: ValidityTenYears(),
IsCA: true,
}

return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-lb-signer")
return c.SelfSignedCertKey.Generate(ctx, cfg, "kube-apiserver-lb-signer", nil)
}

// Load reads the asset files from disk.
Expand Down
12 changes: 9 additions & 3 deletions pkg/asset/tls/boundsasigningkey.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package tls

import (
"context"
"crypto/rsa"
"fmt"
"os"

"github.com/pkg/errors"
Expand Down Expand Up @@ -50,10 +52,14 @@ func (sk *BoundSASigningKey) Load(f asset.FileFetcher) (bool, error) {
return false, err
}

rsaKey, err := PemToPrivateKey(keyFile.Data)
key, err := PemToPrivateKey(keyFile.Data)
if err != nil {
logrus.Debugf("Failed to load rsa.PrivateKey from file: %s", err)
return false, errors.Wrap(err, "failed to load rsa.PrivateKey from the file")
logrus.Debugf("Failed to load private key from file: %s", err)
return false, fmt.Errorf("failed to load private key from the file: %w", err)
}
rsaKey, ok := key.(*rsa.PrivateKey)
if !ok {
return false, fmt.Errorf("bound service account signing key must be RSA")
}
pubData, err := PublicKeyToPem(&rsaKey.PublicKey)
if err != nil {
Expand Down
61 changes: 32 additions & 29 deletions pkg/asset/tls/certkey.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ package tls
import (
"bytes"
"context"
"crypto/rsa"
"crypto/x509"
"fmt"
"os"

"github.com/pkg/errors"
"github.com/sirupsen/logrus"

"github.com/openshift/installer/pkg/asset"
"github.com/openshift/installer/pkg/types"
)

// CertInterface contains cert.
Expand Down Expand Up @@ -128,29 +127,28 @@ func (c *SignedCertKey) Generate(_ context.Context,
filenameBase string,
appendParent AppendParentChoice,
) error {
var key *rsa.PrivateKey
var crt *x509.Certificate
var err error

caKey, err := PemToPrivateKey(parentCA.Key())
if err != nil {
logrus.Debugf("Failed to parse RSA private key: %s", err)
return errors.Wrap(err, "failed to parse rsa private key")
logrus.Debugf("Failed to parse private key: %s", err)
return fmt.Errorf("failed to parse private key: %w", err)
}

caCert, err := PemToCertificate(parentCA.Cert())
if err != nil {
logrus.Debugf("Failed to parse x509 certificate: %s", err)
return errors.Wrap(err, "failed to parse x509 certificate")
return fmt.Errorf("failed to parse x509 certificate: %w", err)
}

key, crt, err = GenerateSignedCertificate(caKey, caCert, cfg)
key, crt, err := GenerateSignedCertificate(caKey, caCert, cfg)
if err != nil {
logrus.Debugf("Failed to generate signed cert/key pair: %s", err)
return errors.Wrap(err, "failed to generate signed cert/key pair")
return fmt.Errorf("failed to generate signed cert/key pair: %w", err)
}

c.KeyRaw = PrivateKeyToPem(key)
c.KeyRaw, err = PrivateKeyToPem(key)
if err != nil {
return fmt.Errorf("failed to encode private key to PEM: %w", err)
}
c.CertRaw = CertToPem(crt)

if appendParent {
Expand All @@ -167,17 +165,23 @@ type SelfSignedCertKey struct {
CertKey
}

// Generate generates a cert/key pair signed by the specified parent CA.
// Generate generates a self-signed cert/key pair using the specified PKI profile.
func (c *SelfSignedCertKey) Generate(_ context.Context,
cfg *CertCfg,
filenameBase string,
pkiConfig *types.PKIConfig,
) error {
key, crt, err := GenerateSelfSignedCertificate(cfg)
params := PKIConfigToKeyParams(pkiConfig)

key, crt, err := GenerateSelfSignedCertificate(cfg, params)
if err != nil {
return errors.Wrap(err, "failed to generate self-signed cert/key pair")
return fmt.Errorf("failed to generate self-signed cert/key pair: %w", err)
}

c.KeyRaw = PrivateKeyToPem(key)
c.KeyRaw, err = PrivateKeyToPem(key)
if err != nil {
return fmt.Errorf("failed to encode private key to PEM: %w", err)
}
c.CertRaw = CertToPem(crt)

c.generateFiles(filenameBase)
Expand All @@ -192,29 +196,28 @@ func RegenerateSignedCertKey(
parentCA CertKeyInterface,
appendParent AppendParentChoice,
) ([]byte, []byte, error) {
var key *rsa.PrivateKey
var crt *x509.Certificate
var err error

caKey, err := PemToPrivateKey(parentCA.Key())
if err != nil {
logrus.Debugf("Failed to parse RSA private key: %s", err)
return nil, nil, errors.Wrap(err, "failed to parse rsa private key")
logrus.Debugf("Failed to parse private key: %s", err)
return nil, nil, fmt.Errorf("failed to parse private key: %w", err)
}

caCert, err := PemToCertificate(parentCA.Cert())
if err != nil {
logrus.Debugf("Failed to parse x509 certificate: %s", err)
return nil, nil, errors.Wrap(err, "failed to parse x509 certificate")
return nil, nil, fmt.Errorf("failed to parse x509 certificate: %w", err)
}

key, crt, err = GenerateSignedCertificate(caKey, caCert, cfg)
if err != nil {
logrus.Debugf("Failed to generate signed cert/key pair: %s", err)
return nil, nil, errors.Wrap(err, "failed to generate signed cert/key pair")
key, crt, generateErr := GenerateSignedCertificate(caKey, caCert, cfg)
if generateErr != nil {
logrus.Debugf("Failed to generate signed cert/key pair: %s", generateErr)
return nil, nil, fmt.Errorf("failed to generate signed cert/key pair: %w", generateErr)
}

keyRaw := PrivateKeyToPem(key)
keyRaw, err := PrivateKeyToPem(key)
if err != nil {
return nil, nil, fmt.Errorf("failed to encode private key to PEM: %w", err)
}
certRaw := CertToPem(crt)

if appendParent {
Expand Down
Loading