There’s some inconsistency between SSL implementations on how they match wildcards, however you’ll need the root as an alternate name for that to work with most clients.
For a *.example.com
cert,
a.example.com
should passwww.example.com
should passexample.com
should not passa.b.example.com
may pass depending on implementation (but probably not).
Essentially, the standards say that the *
should match 1 or more non-dot characters, but some implementations allow a dot.
The canonical answer should be in RFC 2818 (HTTP Over TLS):
Matching is performed using the matching rules specified by
[RFC2459]. If more than one identity of a given type is present in
the certificate (e.g., more than one dNSName name, a match in any one
of the set is considered acceptable.) Names may contain the wildcard
character * which is considered to match any single domain name
component or component fragment. E.g.,*.a.com
matches foo.a.com but
not bar.foo.a.com.f*.com
matches foo.com but not bar.com.
RFC 2459 says:
- A “*” wildcard character MAY be used as the left-most name
component in the certificate. For example,*.example.com
would
match a.example.com, foo.example.com, etc. but would not match
example.com.
If you need a cert to work for example.com, www.example.com and foo.example.com, you need a certificate with subjectAltNames so that you have “example.com” and “*.example.com” (or example.com and all the other names you might need to match).