mirror of
https://github.com/pomerium/pomerium.git
synced 2025-07-14 23:38:39 +02:00
envoy: configure upstream IP SAN match as needed
When building an upstream validation context for a particular URL, check whether the hostname is an IP address. If so, configure the SAN match to use type IP_ADDRESS rather than DNS.
This commit is contained in:
parent
26bbcdfe07
commit
015d1e1fb1
2 changed files with 24 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/asn1"
|
"encoding/asn1"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -24,6 +25,17 @@ func (b *Builder) buildSubjectAltNameMatcher(
|
||||||
sni = overrideName
|
sni = overrideName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if net.ParseIP(sni) != nil {
|
||||||
|
return &envoy_extensions_transport_sockets_tls_v3.SubjectAltNameMatcher{
|
||||||
|
SanType: envoy_extensions_transport_sockets_tls_v3.SubjectAltNameMatcher_IP_ADDRESS,
|
||||||
|
Matcher: &envoy_type_matcher_v3.StringMatcher{
|
||||||
|
MatchPattern: &envoy_type_matcher_v3.StringMatcher_Exact{
|
||||||
|
Exact: sni,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(sni, "*") {
|
if strings.Contains(sni, "*") {
|
||||||
pattern := regexp.QuoteMeta(sni)
|
pattern := regexp.QuoteMeta(sni)
|
||||||
pattern = strings.Replace(pattern, "\\*", ".*", -1)
|
pattern = strings.Replace(pattern, "\\*", ".*", -1)
|
||||||
|
|
|
@ -21,6 +21,18 @@ func TestBuildSubjectAltNameMatcher(t *testing.T) {
|
||||||
"exact": "example.com"
|
"exact": "example.com"
|
||||||
}
|
}
|
||||||
}`, b.buildSubjectAltNameMatcher(&url.URL{Host: "example.com:1234"}, ""))
|
}`, b.buildSubjectAltNameMatcher(&url.URL{Host: "example.com:1234"}, ""))
|
||||||
|
testutil.AssertProtoJSONEqual(t, `{
|
||||||
|
"sanType": "IP_ADDRESS",
|
||||||
|
"matcher": {
|
||||||
|
"exact": "10.0.0.1"
|
||||||
|
}
|
||||||
|
}`, b.buildSubjectAltNameMatcher(&url.URL{Host: "10.0.0.1:1234"}, ""))
|
||||||
|
testutil.AssertProtoJSONEqual(t, `{
|
||||||
|
"sanType": "IP_ADDRESS",
|
||||||
|
"matcher": {
|
||||||
|
"exact": "fd12:3456:789a:1::1"
|
||||||
|
}
|
||||||
|
}`, b.buildSubjectAltNameMatcher(&url.URL{Host: "[fd12:3456:789a:1::1]:1234"}, ""))
|
||||||
testutil.AssertProtoJSONEqual(t, `{
|
testutil.AssertProtoJSONEqual(t, `{
|
||||||
"sanType": "DNS",
|
"sanType": "DNS",
|
||||||
"matcher": {
|
"matcher": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue