Skip to content

Commit f81aa23

Browse files
committed
crypto/x509: treat hostnames with colons as invalid
Colons are port separators, so it's risky to allow them in hostnames. Per the CL 231377 rule, if we at least consider them invalid we will not apply wildcard processing to them, making behavior a little more predictable. We were considering hostnames with colons valid (against spec) because that meant we'd not ignore them in Common Name. (There was at least one deployment that was putting colons in Common Name and expecting it to verify.) Now that Common Name is ignored by default, those clients will break again, so it's a good time to drop the exception. Hopefully they moved to SANs, where invalid hostnames are checked 1:1 (ignoring wildcards) but still work. (If they didn't, this change means they can't use GODEBUG=x509ignoreCN=0 to opt back in, but again you don't get to use a legacy deprecated field AND invalid hostnames.) Updates #24151 Change-Id: Id44b4fecb2d620480acdfc65fea1473f7abbca7f Reviewed-on: https://go-review.googlesource.com/c/go/+/231381 Run-TryBot: Filippo Valsorda <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Katie Hockman <[email protected]>
1 parent 95c5ec6 commit f81aa23

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

src/crypto/x509/verify.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -940,8 +940,8 @@ func validHostname(host string, isPattern bool) bool {
940940
if c == '-' && j != 0 {
941941
continue
942942
}
943-
if c == '_' || c == ':' {
944-
// Not valid characters in hostnames, but commonly
943+
if c == '_' {
944+
// Not a valid character in hostnames, but commonly
945945
// found in deployments outside the WebPKI.
946946
continue
947947
}

src/crypto/x509/verify_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2004,7 +2004,7 @@ func TestValidHostname(t *testing.T) {
20042004
{host: "foo.*.example.com"},
20052005
{host: "exa_mple.com", validInput: true, validPattern: true},
20062006
{host: "foo,bar"},
2007-
{host: "project-dev:us-central1:main", validInput: true, validPattern: true},
2007+
{host: "project-dev:us-central1:main"},
20082008
}
20092009
for _, tt := range tests {
20102010
if got := validHostnamePattern(tt.host); got != tt.validPattern {

src/crypto/x509/x509_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,15 @@ var matchHostnamesTests = []matchHostnamesTest{
376376
{"*.com", "example.com", true},
377377
{"*.com", "example.com.", true},
378378
{"foo:bar", "foo:bar", true},
379-
{"*.foo:bar", "xxx.foo:bar", true},
379+
{"*.foo:bar", "xxx.foo:bar", false},
380+
{"*.2.3.4", "1.2.3.4", false},
381+
{"*.2.3.4", "[1.2.3.4]", false},
382+
{"*:4860:4860::8888", "2001:4860:4860::8888", false},
383+
{"*:4860:4860::8888", "[2001:4860:4860::8888]", false},
384+
{"2001:4860:4860::8888", "2001:4860:4860::8888", false},
385+
{"2001:4860:4860::8888", "[2001:4860:4860::8888]", false},
386+
{"[2001:4860:4860::8888]", "2001:4860:4860::8888", false},
387+
{"[2001:4860:4860::8888]", "[2001:4860:4860::8888]", false},
380388
}
381389

382390
func TestMatchHostnames(t *testing.T) {

0 commit comments

Comments
 (0)