|
@@ -68,6 +68,7 @@ type Reconciler struct {
|
|
|
CrdResources []string
|
|
CrdResources []string
|
|
|
dnsName string
|
|
dnsName string
|
|
|
CAName string
|
|
CAName string
|
|
|
|
|
+ CAChainName string
|
|
|
CAOrganization string
|
|
CAOrganization string
|
|
|
RequeueInterval time.Duration
|
|
RequeueInterval time.Duration
|
|
|
|
|
|
|
@@ -152,7 +153,7 @@ func (r *Reconciler) ReadyCheck(_ *http.Request) error {
|
|
|
return r.checkEndpoints()
|
|
return r.checkEndpoints()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (r Reconciler) checkCRDs() error {
|
|
|
|
|
|
|
+func (r *Reconciler) checkCRDs() error {
|
|
|
for _, res := range r.CrdResources {
|
|
for _, res := range r.CrdResources {
|
|
|
r.readyStatusMapMu.Lock()
|
|
r.readyStatusMapMu.Lock()
|
|
|
rdy := r.readyStatusMap[res]
|
|
rdy := r.readyStatusMap[res]
|
|
@@ -164,7 +165,7 @@ func (r Reconciler) checkCRDs() error {
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (r Reconciler) checkEndpoints() error {
|
|
|
|
|
|
|
+func (r *Reconciler) checkEndpoints() error {
|
|
|
var eps corev1.Endpoints
|
|
var eps corev1.Endpoints
|
|
|
err := r.Get(context.TODO(), types.NamespacedName{
|
|
err := r.Get(context.TODO(), types.NamespacedName{
|
|
|
Name: r.SvcName,
|
|
Name: r.SvcName,
|
|
@@ -288,10 +289,18 @@ func ValidCert(caCert, cert, key []byte, dnsName string, at time.Time) (bool, er
|
|
|
return false, err
|
|
return false, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- b, _ := pem.Decode(cert)
|
|
|
|
|
|
|
+ b, rest := pem.Decode(cert)
|
|
|
if b == nil {
|
|
if b == nil {
|
|
|
return false, err
|
|
return false, err
|
|
|
}
|
|
}
|
|
|
|
|
+ if len(rest) > 0 {
|
|
|
|
|
+ intermediate, _ := pem.Decode(rest)
|
|
|
|
|
+ inter, err := x509.ParseCertificate(intermediate.Bytes)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return false, err
|
|
|
|
|
+ }
|
|
|
|
|
+ pool.AddCert(inter)
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
crt, err := x509.ParseCertificate(b.Bytes)
|
|
crt, err := x509.ParseCertificate(b.Bytes)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -438,6 +447,42 @@ func (r *Reconciler) CreateCACert(begin, end time.Time) (*KeyPairArtifacts, erro
|
|
|
return &KeyPairArtifacts{Cert: cert, Key: key, CertPEM: certPEM, KeyPEM: keyPEM}, nil
|
|
return &KeyPairArtifacts{Cert: cert, Key: key, CertPEM: certPEM, KeyPEM: keyPEM}, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (r *Reconciler) CreateCAChain(ca *KeyPairArtifacts, begin, end time.Time) (*KeyPairArtifacts, error) {
|
|
|
|
|
+ templ := &x509.Certificate{
|
|
|
|
|
+ SerialNumber: big.NewInt(2),
|
|
|
|
|
+ Subject: pkix.Name{
|
|
|
|
|
+ CommonName: r.CAChainName,
|
|
|
|
|
+ Organization: []string{r.CAOrganization},
|
|
|
|
|
+ },
|
|
|
|
|
+ DNSNames: []string{
|
|
|
|
|
+ r.CAChainName,
|
|
|
|
|
+ },
|
|
|
|
|
+ NotBefore: begin,
|
|
|
|
|
+ NotAfter: end,
|
|
|
|
|
+ KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment | x509.KeyUsageCertSign,
|
|
|
|
|
+ BasicConstraintsValid: true,
|
|
|
|
|
+ IsCA: true,
|
|
|
|
|
+ }
|
|
|
|
|
+ key, err := rsa.GenerateKey(rand.Reader, 2048)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ der, err := x509.CreateCertificate(rand.Reader, templ, ca.Cert, key.Public(), ca.Key)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ certPEM, keyPEM, err := pemEncode(der, key)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ cert, err := x509.ParseCertificate(der)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return &KeyPairArtifacts{Cert: cert, Key: key, CertPEM: certPEM, KeyPEM: keyPEM}, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (r *Reconciler) CreateCertPEM(ca *KeyPairArtifacts, begin, end time.Time) ([]byte, []byte, error) {
|
|
func (r *Reconciler) CreateCertPEM(ca *KeyPairArtifacts, begin, end time.Time) ([]byte, []byte, error) {
|
|
|
templ := &x509.Certificate{
|
|
templ := &x509.Certificate{
|
|
|
SerialNumber: big.NewInt(1),
|
|
SerialNumber: big.NewInt(1),
|