Add field FileSHA in BasicDigest struct

This commit is contained in:
Manuel de Brito Fontes 2017-07-31 14:22:10 -04:00
parent 65e8cecbac
commit 98a95282f9
4 changed files with 31 additions and 19 deletions

19
core/pkg/file/file.go Normal file
View file

@ -0,0 +1,19 @@
package file
import (
"crypto/sha1"
"encoding/hex"
"io/ioutil"
)
// SHA1 returns the SHA1 of a file.
func SHA1(filename string) string {
hasher := sha1.New()
s, err := ioutil.ReadFile(filename)
if err != nil {
return ""
}
hasher.Write(s)
return hex.EncodeToString(hasher.Sum(nil))
}

View file

@ -27,6 +27,7 @@ import (
api "k8s.io/api/core/v1" api "k8s.io/api/core/v1"
extensions "k8s.io/api/extensions/v1beta1" extensions "k8s.io/api/extensions/v1beta1"
"k8s.io/ingress/core/pkg/file"
"k8s.io/ingress/core/pkg/ingress/annotations/parser" "k8s.io/ingress/core/pkg/ingress/annotations/parser"
ing_errors "k8s.io/ingress/core/pkg/ingress/errors" ing_errors "k8s.io/ingress/core/pkg/ingress/errors"
"k8s.io/ingress/core/pkg/ingress/resolver" "k8s.io/ingress/core/pkg/ingress/resolver"
@ -51,6 +52,7 @@ type BasicDigest struct {
Realm string `json:"realm"` Realm string `json:"realm"`
File string `json:"file"` File string `json:"file"`
Secured bool `json:"secured"` Secured bool `json:"secured"`
FileSHA string `json:"fileSha"`
} }
// Equal tests for equality between two BasicDigest types // Equal tests for equality between two BasicDigest types
@ -73,6 +75,9 @@ func (bd1 *BasicDigest) Equal(bd2 *BasicDigest) bool {
if bd1.Secured != bd2.Secured { if bd1.Secured != bd2.Secured {
return false return false
} }
if bd1.FileSHA != bd2.FileSHA {
return false
}
return true return true
} }
@ -140,6 +145,7 @@ func (a auth) Parse(ing *extensions.Ingress) (interface{}, error) {
Realm: realm, Realm: realm,
File: passFile, File: passFile,
Secured: true, Secured: true,
FileSHA: file.SHA1(passFile),
}, nil }, nil
} }

View file

@ -42,6 +42,7 @@ import (
"k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/flowcontrol"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/ingress/core/pkg/file"
"k8s.io/ingress/core/pkg/ingress" "k8s.io/ingress/core/pkg/ingress"
"k8s.io/ingress/core/pkg/ingress/annotations/class" "k8s.io/ingress/core/pkg/ingress/annotations/class"
"k8s.io/ingress/core/pkg/ingress/annotations/healthcheck" "k8s.io/ingress/core/pkg/ingress/annotations/healthcheck"
@ -982,7 +983,7 @@ func (ic *GenericController) createServers(data []interface{},
defaultPemSHA = defaultCertificate.PemSHA defaultPemSHA = defaultCertificate.PemSHA
} else { } else {
defaultPemFileName = fakeCertificatePath defaultPemFileName = fakeCertificatePath
defaultPemSHA = ssl.PemSHA1(fakeCertificatePath) defaultPemSHA = file.SHA1(fakeCertificatePath)
} }
} else { } else {
defaultPemFileName = defaultCertificate.PemFileName defaultPemFileName = defaultCertificate.PemFileName

View file

@ -19,12 +19,10 @@ package ssl
import ( import (
"crypto/rand" "crypto/rand"
"crypto/rsa" "crypto/rsa"
"crypto/sha1"
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"crypto/x509/pkix" "crypto/x509/pkix"
"encoding/asn1" "encoding/asn1"
"encoding/hex"
"encoding/pem" "encoding/pem"
"errors" "errors"
"fmt" "fmt"
@ -38,6 +36,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/ingress/core/pkg/file"
"k8s.io/ingress/core/pkg/ingress" "k8s.io/ingress/core/pkg/ingress"
) )
@ -163,7 +162,7 @@ func AddOrUpdateCertAndKey(name string, cert, key, ca []byte) (*ingress.SSLCert,
return &ingress.SSLCert{ return &ingress.SSLCert{
CAFileName: pemFileName, CAFileName: pemFileName,
PemFileName: pemFileName, PemFileName: pemFileName,
PemSHA: PemSHA1(pemFileName), PemSHA: file.SHA1(pemFileName),
CN: cn.List(), CN: cn.List(),
ExpireTime: pemCert.NotAfter, ExpireTime: pemCert.NotAfter,
}, nil }, nil
@ -171,7 +170,7 @@ func AddOrUpdateCertAndKey(name string, cert, key, ca []byte) (*ingress.SSLCert,
return &ingress.SSLCert{ return &ingress.SSLCert{
PemFileName: pemFileName, PemFileName: pemFileName,
PemSHA: PemSHA1(pemFileName), PemSHA: file.SHA1(pemFileName),
CN: cn.List(), CN: cn.List(),
ExpireTime: pemCert.NotAfter, ExpireTime: pemCert.NotAfter,
}, nil }, nil
@ -273,7 +272,7 @@ func AddCertAuth(name string, ca []byte) (*ingress.SSLCert, error) {
return &ingress.SSLCert{ return &ingress.SSLCert{
CAFileName: caFileName, CAFileName: caFileName,
PemFileName: caFileName, PemFileName: caFileName,
PemSHA: PemSHA1(caFileName), PemSHA: file.SHA1(caFileName),
}, nil }, nil
} }
@ -325,19 +324,6 @@ func AddOrUpdateDHParam(name string, dh []byte) (string, error) {
return pemFileName, nil return pemFileName, nil
} }
// PemSHA1 returns the SHA1 of a pem file. This is used to
// reload NGINX in case a secret with a SSL certificate changed.
func PemSHA1(filename string) string {
hasher := sha1.New()
s, err := ioutil.ReadFile(filename)
if err != nil {
return ""
}
hasher.Write(s)
return hex.EncodeToString(hasher.Sum(nil))
}
// GetFakeSSLCert creates a Self Signed Certificate // GetFakeSSLCert creates a Self Signed Certificate
// Based in the code https://golang.org/src/crypto/tls/generate_cert.go // Based in the code https://golang.org/src/crypto/tls/generate_cert.go
func GetFakeSSLCert() ([]byte, []byte) { func GetFakeSSLCert() ([]byte, []byte) {