diff --git a/factory/cert_utils.go b/factory/cert_utils.go index 95405e6..343874f 100644 --- a/factory/cert_utils.go +++ b/factory/cert_utils.go @@ -10,13 +10,17 @@ import ( "math" "math/big" "net" + "os" + "strconv" + "strings" "time" "github.com/sirupsen/logrus" ) const ( - CertificateBlockType = "CERTIFICATE" + CertificateBlockType = "CERTIFICATE" + defaultNewSignedCertExpirationDays = 365 ) func NewSelfSignedCACert(key crypto.Signer, cn string, org ...string) (*x509.Certificate, error) { @@ -59,6 +63,12 @@ func NewSignedClientCert(signer crypto.Signer, caCert *x509.Certificate, caKey c }, } + parts := strings.Split(cn, ",o=") + if len(parts) > 1 { + parent.Subject.CommonName = parts[0] + parent.Subject.Organization = parts[1:] + } + cert, err := x509.CreateCertificate(rand.Reader, &parent, caCert, signer.Public(), caKey) if err != nil { return nil, err @@ -75,12 +85,22 @@ func NewSignedCert(signer crypto.Signer, caCert *x509.Certificate, caKey crypto. return nil, err } + expirationDays := defaultNewSignedCertExpirationDays + envExpirationDays := os.Getenv("CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS") + if envExpirationDays != "" { + if envExpirationDaysInt, err := strconv.Atoi(envExpirationDays); err != nil { + logrus.Infof("[NewSignedCert] expiration days from ENV (%s) could not be converted to int (falling back to default value: %d)", envExpirationDays, defaultExpirationDays) + } else { + expirationDays = envExpirationDaysInt + } + } + parent := x509.Certificate{ DNSNames: domains, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, IPAddresses: ips, KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - NotAfter: time.Now().Add(time.Hour * 24 * 365).UTC(), + NotAfter: time.Now().Add(time.Hour * 24 * time.Duration(expirationDays)).UTC(), NotBefore: caCert.NotBefore, SerialNumber: serialNumber, Subject: pkix.Name{