In case of TLS errors do not allow traffic (#2146)

This commit is contained in:
Manuel Alejandro de Brito Fontes 2018-02-25 17:20:14 -03:00 committed by GitHub
parent 216fe01a07
commit 3c67976969
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 23 additions and 6 deletions

View file

@ -150,6 +150,14 @@ func (e Extractor) Extract(ing *extensions.Ingress) *Ingress {
continue continue
} }
if name == "CertificateAuth" && data[name] == nil {
data[name] = authtls.Config{
AuthTLSError: err.Error(),
}
// avoid mapping the result from the annotation
val = nil
}
_, alreadyDenied := data[DeniedKeyName] _, alreadyDenied := data[DeniedKeyName]
if !alreadyDenied { if !alreadyDenied {
data[DeniedKeyName] = err data[DeniedKeyName] = err

View file

@ -45,6 +45,7 @@ type Config struct {
ValidationDepth int `json:"validationDepth"` ValidationDepth int `json:"validationDepth"`
ErrorPage string `json:"errorPage"` ErrorPage string `json:"errorPage"`
PassCertToUpstream bool `json:"passCertToUpstream"` PassCertToUpstream bool `json:"passCertToUpstream"`
AuthTLSError string
} }
// Equal tests for equality between two Config types // Equal tests for equality between two Config types
@ -113,9 +114,8 @@ func (a authTLS) Parse(ing *extensions.Ingress) (interface{}, error) {
authCert, err := a.r.GetAuthCertificate(tlsauthsecret) authCert, err := a.r.GetAuthCertificate(tlsauthsecret)
if err != nil { if err != nil {
return &Config{}, ing_errors.LocationDenied{ e := errors.Wrap(err, "error obtaining certificate")
Reason: errors.Wrap(err, "error obtaining certificate"), return &Config{}, ing_errors.LocationDenied{Reason: e}
}
} }
errorpage, err := parser.GetStringAnnotation("auth-tls-error-page", ing) errorpage, err := parser.GetStringAnnotation("auth-tls-error-page", ing)

View file

@ -369,12 +369,14 @@ func (n *NGINXController) getBackendServers(ingresses []*extensions.Ingress) ([]
continue continue
} }
if server.AuthTLSError == "" && anns.CertificateAuth.AuthTLSError != "" {
server.AuthTLSError = anns.CertificateAuth.AuthTLSError
}
if server.CertificateAuth.CAFileName == "" { if server.CertificateAuth.CAFileName == "" {
server.CertificateAuth = anns.CertificateAuth
// It is possible that no CAFileName is found in the secret // It is possible that no CAFileName is found in the secret
if server.CertificateAuth.CAFileName == "" { if server.CertificateAuth.CAFileName == "" {
glog.V(3).Infof("secret %v does not contain 'ca.crt', mutual authentication not enabled - ingress rule %v/%v.", server.CertificateAuth.Secret, ing.Namespace, ing.Name) glog.V(3).Infof("secret %v does not contain 'ca.crt', mutual authentication not enabled - ingress rule %v/%v.", server.CertificateAuth.Secret, ing.Namespace, ing.Name)
} }
} else { } else {
glog.V(3).Infof("server %v already contains a mutual authentication configuration - ingress rule %v/%v", server.Hostname, ing.Namespace, ing.Name) glog.V(3).Infof("server %v already contains a mutual authentication configuration - ingress rule %v/%v", server.Hostname, ing.Namespace, ing.Name)

View file

@ -162,6 +162,8 @@ type Server struct {
ServerSnippet string `json:"serverSnippet"` ServerSnippet string `json:"serverSnippet"`
// SSLCiphers returns list of ciphers to be enabled // SSLCiphers returns list of ciphers to be enabled
SSLCiphers string `json:"sslCiphers,omitempty"` SSLCiphers string `json:"sslCiphers,omitempty"`
// AuthTLSError contains the reason why the access to a server should be denied
AuthTLSError string `json:"authTLSError,omitempty"`
} }
// Location describes an URI inside a server. // Location describes an URI inside a server.

View file

@ -622,6 +622,11 @@ stream {
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ if not (empty $server.AuthTLSError) }}
# {{ $server.AuthTLSError }}
return 403;
{{ else }}
{{ if not (empty $server.CertificateAuth.CAFileName) }} {{ if not (empty $server.CertificateAuth.CAFileName) }}
# PEM sha: {{ $server.CertificateAuth.PemSHA }} # PEM sha: {{ $server.CertificateAuth.PemSHA }}
ssl_client_certificate {{ $server.CertificateAuth.CAFileName }}; ssl_client_certificate {{ $server.CertificateAuth.CAFileName }};
@ -898,7 +903,7 @@ stream {
return 503; return 503;
{{ end }} {{ end }}
} }
{{ end }}
{{ end }} {{ end }}
{{ if eq $server.Hostname "_" }} {{ if eq $server.Hostname "_" }}