1
0
mirror of https://github.com/golang/go synced 2024-11-18 08:44:43 -07:00

crypto/x509: allow wildcards only as the first label.

RFC 6125 now specifies that wildcards are only allowed for the leftmost
label in a pattern: https://tools.ietf.org/html/rfc6125#section-6.4.3.

This change updates Go to match the behaviour of major browsers in this
respect.

Fixes #9834.

Change-Id: I37c10a35177133624568f2e0cf2767533926b04a
Reviewed-on: https://go-review.googlesource.com/5691
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Adam Langley 2015-02-23 15:11:39 -08:00
parent 8f8d066bfd
commit e7fae68540
2 changed files with 7 additions and 4 deletions

View File

@ -337,7 +337,7 @@ func matchHostnames(pattern, host string) bool {
} }
for i, patternPart := range patternParts { for i, patternPart := range patternParts {
if patternPart == "*" { if i == 0 && patternPart == "*" {
continue continue
} }
if patternPart != hostParts[i] { if patternPart != hostParts[i] {

View File

@ -163,11 +163,14 @@ var matchHostnamesTests = []matchHostnamesTest{
{"example.com", "example.com", true}, {"example.com", "example.com", true},
{"example.com", "example.com.", true}, {"example.com", "example.com.", true},
{"example.com", "www.example.com", false}, {"example.com", "www.example.com", false},
{"*.example.com", "example.com", false},
{"*.example.com", "www.example.com", true}, {"*.example.com", "www.example.com", true},
{"*.example.com", "www.example.com.", true}, {"*.example.com", "www.example.com.", true},
{"*.example.com", "xyz.www.example.com", false}, {"*.example.com", "xyz.www.example.com", false},
{"*.*.example.com", "xyz.www.example.com", true}, {"*.*.example.com", "xyz.www.example.com", false},
{"*.www.*.com", "xyz.www.example.com", true}, {"*.www.*.com", "xyz.www.example.com", false},
{"*bar.example.com", "foobar.example.com", false},
{"f*.example.com", "foobar.example.com", false},
{"", ".", false}, {"", ".", false},
{".", "", false}, {".", "", false},
{".", ".", false}, {".", ".", false},
@ -177,7 +180,7 @@ func TestMatchHostnames(t *testing.T) {
for i, test := range matchHostnamesTests { for i, test := range matchHostnamesTests {
r := matchHostnames(test.pattern, test.host) r := matchHostnames(test.pattern, test.host)
if r != test.ok { if r != test.ok {
t.Errorf("#%d mismatch got: %t want: %t", i, r, test.ok) t.Errorf("#%d mismatch got: %t want: %t when matching '%s' against '%s'", i, r, test.ok, test.host, test.pattern)
} }
} }
} }