if len(host) == 0 {
return false
}
+ if host == "*" {
+ // Bare wildcards are not allowed, they are not valid DNS names,
+ // nor are they allowed per RFC 6125.
+ return false
+ }
for i, part := range strings.Split(host, ".") {
if part == "" {
t.Fatalf("buildChains returned unexpected error, got: %v, want %v", err, UnknownAuthorityError{})
}
}
+
+func TestVerifyBareWildcard(t *testing.T) {
+ k, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ if err != nil {
+ t.Fatalf("failed to generate key: %s", err)
+ }
+ tmpl := &Certificate{
+ SerialNumber: big.NewInt(1),
+ Subject: pkix.Name{CommonName: "test"},
+ NotBefore: time.Now().Add(-time.Hour),
+ NotAfter: time.Now().Add(time.Hour),
+ DNSNames: []string{"*"},
+ }
+ cDER, err := CreateCertificate(rand.Reader, tmpl, tmpl, k.Public(), k)
+ if err != nil {
+ t.Fatalf("failed to create certificate: %s", err)
+ }
+ c, err := ParseCertificate(cDER)
+ if err != nil {
+ t.Fatalf("failed to parse certificate: %s", err)
+ }
+
+ if err := c.VerifyHostname("label"); err == nil {
+ t.Fatalf("VerifyHostname unexpected success with bare wildcard SAN")
+ }
+}