mirror of
https://github.com/k3s-io/k3s.git
synced 2026-04-07 02:15:03 -04:00
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package util
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"time"
|
|
|
|
certutil "github.com/rancher/dynamiclistener/cert"
|
|
)
|
|
|
|
// cert usage constants
|
|
const (
|
|
CertUsageCertSign = "CertSign"
|
|
CertUsageServerAuth = "ServerAuth"
|
|
CertUsageClientAuth = "ClientAuth"
|
|
CertUsageUnknown = "Unknown"
|
|
)
|
|
|
|
// cert status constants
|
|
const (
|
|
CertStatusOK = "OK"
|
|
CertStatusWarning = "WARNING"
|
|
CertStatusExpired = "EXPIRED"
|
|
CertStatusNotYetValid = "NOT YET VALID"
|
|
)
|
|
|
|
// EncodeCertsPEM is a wrapper around the EncodeCertPEM function to return the
|
|
// PEM encoding of a cert and chain, instead of just a single cert.
|
|
func EncodeCertsPEM(cert *x509.Certificate, caCerts []*x509.Certificate) []byte {
|
|
pemBytes := certutil.EncodeCertPEM(cert)
|
|
for _, caCert := range caCerts {
|
|
pemBytes = append(pemBytes, certutil.EncodeCertPEM(caCert)...)
|
|
}
|
|
return pemBytes
|
|
}
|
|
|
|
// GetCertUsages returns a slice of strings representing the certificate usages
|
|
func GetCertUsages(cert *x509.Certificate) []string {
|
|
usages := []string{}
|
|
if cert.KeyUsage&x509.KeyUsageCertSign != 0 {
|
|
usages = append(usages, CertUsageCertSign)
|
|
}
|
|
for _, eku := range cert.ExtKeyUsage {
|
|
switch eku {
|
|
case x509.ExtKeyUsageServerAuth:
|
|
usages = append(usages, CertUsageServerAuth)
|
|
case x509.ExtKeyUsageClientAuth:
|
|
usages = append(usages, CertUsageClientAuth)
|
|
}
|
|
}
|
|
if len(usages) == 0 {
|
|
usages = append(usages, CertUsageUnknown)
|
|
}
|
|
return usages
|
|
}
|
|
|
|
// GetCertStatus determines the status of a certificate based on its validity period
|
|
func GetCertStatus(cert *x509.Certificate, now time.Time, warn time.Time) string {
|
|
if now.Before(cert.NotBefore) {
|
|
return CertStatusNotYetValid
|
|
} else if now.After(cert.NotAfter) {
|
|
return CertStatusExpired
|
|
} else if warn.After(cert.NotAfter) {
|
|
return CertStatusWarning
|
|
}
|
|
return CertStatusOK
|
|
}
|