我在 IIS 网站上有一个通过 Win-Acme 生成的 LetsEncrypt 证书。一段时间后,有人要求将其更改为由 RapidSSL 生成的其他证书。我收到了证书,成功将其安装到 IIS 中并在站点绑定中选择了它。但是,IIS 仍然继续使用旧证书并忽略新证书。
我尝试过的事情:
- 从 IIS 和证书存储中删除证书
- 重新启动 IIS 站点
- 重新启动所有相关的应用程序池
- 将所有相关应用程序池的超时设置
Idle timeout
为 1 分钟,并让它们全部终止 - 按照这个 GitHub 问题 - 重新启动整个 Windows 服务器
- 使用手动删除证书
netsh http delete sslcert
,根据命令输出,证书已被成功删除(如上所述这里),然后在 IIS 绑定中重新添加证书 - 从 Win-Acme 中删除了预定的续订
然而,IIS 似乎仍然缓存了它并将其返回。
值得注意的事情:
- 旧证书仍然有效,我更换过期证书时从未遇到任何问题
- 没有负载均衡器或代理
- 我一直使用 OpenSSL CLI 工具来检查证书,以防我的浏览器缓存它
来自服务器名称指示(SNI)的问题?
我做了一些研究,偶然发现了这一点Lex Li 在 stackoverflow 上的回答和这篇博文,其中解释了这个问题实际上可能源于服务器名称指示。但是我确实验证了所有网站都在All Unassigned
IP 地址上运行,并且所有 SSL 绑定都启用了 SNI - 无论是在 IIS GUI 中还是Hostname:port
在 上netsh http show sslcert
。此外,当我尝试使用-servername
参数运行 OpenSSL CLI 工具时(据我所知,应该这里,进行与 SNI 相关的检查),它仍然返回旧证书:
openssl s_client -showcerts -connect my.example.com:443 -servername my.example.com
但是,如果我在使用查看证书后尝试重新添加绑定,netsh
那么正确的证书出现。这似乎与上面链接的 SNI 问题描述相符,但是,这些帖子中的任何解决方案都不适用于我。
我真的开始对此感到困惑了 - 有什么关于如何进一步发展的想法吗?谢谢!