IIS下不带www站点SSL有效 带www站点SSL证书无效如何解决
问题根因
证书校验失败核心是SSL通配符匹配规则和你写的证书SAN配置不匹配,记住两个硬规则就行:
- 通配符
*只能匹配域名最左边、被两个点夹着的一整段字符(也就是一个标签),不能跨层级,更不能写在域名中间位置,写在中间的通配符浏览器直接不认。 - 现在所有现代浏览器校验证书域名,根本不看证书的「使用者(CN)」字段,只认「使用者备用名称(SAN)」里列的条目。
你现在证书里的两个SAN条目问题很明确:
*.local.com:只能匹配类似example.local.com这种只有一级子域名的地址,这也是你访问不带www的地址正常的原因。但www.example.local.com比它多了一层,匹配不上。www.*.local.com:通配符写在了第二个标签段,不是最左边,属于不符合规范的无效配置,浏览器直接忽略这个条目,自然不会拿它匹配www开头的地址。
解决方法
重新生成自签名证书就行,根据自己的需求选一种命令执行:
方案1:只给当前两个域名用(最稳,不会有兼容问题)
如果就用example.local.com和www.example.local.com这俩地址,完全没必要用通配符,直接把两个域名写进SAN,生成命令:
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "example.local.com","www.example.local.com" -FriendlyName "local_iis_cert" -NotAfter (Get-Date).AddYears(10) -KeyAlgorithm RSA -KeyLength 2048
方案2:需要通配符覆盖多个同格式域名
如果后续还要加其他xxx.local.com、www.xxx.local.com类的测试域名,就写两个合法的通配符条目:*.local.com覆盖所有单级子域名,*.example.local.com覆盖example.local.com下的所有子域名(包括www.example.local.com),命令如下:
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "*.local.com","*.example.local.com" -FriendlyName "local_iis_cert" -NotAfter (Get-Date).AddYears(10) -KeyAlgorithm RSA -KeyLength 2048
提醒:没有能一次性匹配所有
www.xxx.local.com格式域名的通配符写法,因为通配符只能放在最左段。如果有多个类似www.a.local.com、www.b.local.com的域名要支持,要么把具体域名逐个加到SAN列表里,要么给每个二级域名单独加对应*.xxx.local.com的通配符条目。
新证书生效操作
- 新证书生成后,从服务器的个人证书存储(
Cert:\LocalMachine\My)导出,重新导入到你本地电脑的「受信任的根证书颁发机构」目录,删掉之前存的旧证书。 - 去IIS里把两个HTTPS绑定关联的证书换成新生成的,执行
iisreset重启IIS服务。 - 清一下浏览器的SSL缓存(或者直接重启浏览器)再访问,两个地址就都能正常通过证书校验了。
内容的提问来源于stack exchange,提问作者TriedAtLeast
相关产品推荐
相关产品推荐

