TL;DR:我的电脑上安装了 Win7 和 IIS 7.5,只有一个网站,这是我为朋友开发的网站的开发副本。该网站有一个需要 HTTPS 的管理模块。在疫情之前,一切都正常。在 3 年没有做任何事情之后,Firefox 和 Chrome 抱怨 SSL 协议,所以经过一番研究,我在注册表中启用了 TLS 1.1 和 1.2。显然为我的朋友和他的本地副本(也是 Win7 和 IIS 7.5)解决了问题,但我的电脑上仍然存在(不同的)服务器证书问题。
经过大量的研究和尝试,尝试获取可以上传到 IIS 的支持 SAN 的自签名证书,然后意识到旧的 IIS 生成的自签名证书已经过期,我现在遇到了以下情况:
我已从 IIS 和我电脑上的受信任的根 CA 列表中删除了已过期的 IIS 生成的自签名证书。
IIS 当前已上传两个自签名证书:
新的 IIS 生成的自签名证书,将于 2024 年到期,并列在我的“受信任的根 CA”列表中
- 版本:V3
- 发行者和主题:myHostname
- 签名算法:sha1RSA
- 公钥:2048 位
- 密钥用途[绿色]:密钥加密,数据加密(30)
- 增强密钥使用 [绿色]:服务器身份验证(1.3.6.1.5.5.7.3.1)
- 预期目的 - 确保远程计算机的身份 - 所有发行政策
MMC 生成的自签名证书,有效期为 2024 年,列在我的“受信任的根 CA”列表中
- 版本:V3
- 发行者和主题:myHostname
- 签名算法:sha1RSA
- 公钥:RSA(2048 位)
- 主题备用名称[绿色]:
- DNS 名称 = localhost
- IP 地址=10.0.0.myLocalNode
- IP 地址=127.0.0.1
- 增强密钥使用 [绿色]:服务器身份验证(1.3.6.1.5.5.7.3.1)
- 应用程序策略 [绿色]
- [1]应用证书策略:策略标识符=服务器身份验证
- 1.3.6.1.4.1.311.10.11.11:[看起来像unicode中的友好名称]
- 1.3.6.1.4.1.311.10.11.13:[看起来像unicode中的描述]
- 密钥用途 [黄色]:密钥加密、数据加密 (30)
- 预期目的 - 确保远程计算机的身份 - 所有发行政策
当我浏览到以下网址时,Firefox 和 Chrome 仍然会看到旧的、过期的证书https://10.0.0.myLocalNode/adminModule,https://127.0.0.1/adminModule或 https://localhost/adminModule。
Firefox 115.5.0 的错误消息是 SSL_ERROR_BAD_CERT_DOMAIN,这与我创建新证书之前收到的错误相同。如果我继续尝试,我会收到“连接到本地主机时发生错误。SSL 收到了意外的 Hello Request 握手消息。”错误代码:SSL_ERROR_RX_UNEXPECTED_HELLO_REQUEST。这也与我之前收到的一样。
Chrome 109.0.5414.120 的错误消息是 NET::ERR_CERT_AUTHORITY_INVALID,我不记得之前收到的错误消息是什么,但我认为是一样的。如果我继续尝试,我会收到“127.0.0.1 [或 10.0.0.myLocalNode,或 localhost] 发送了无效响应。”ERR_SSL_PROTOCOL_ERROR。
我甚至尝试使用 IE 11(我从未使用过),它也给了我一个证书错误页面,尽管它没有显示证书:此网站的安全证书有问题。此网站提供的安全证书是为其他网站的地址颁发的。此网站提供的安全证书不是由受信任的证书颁发机构颁发的。此网站提供的安全证书已过期或尚未生效。
我尝试过多次重启 IIS。我尝试过重启浏览器。我尝试过按 F5、alt-F5、ctrl-F5、shift-F5 来让浏览器刷新页面。我尝试过在 Chrome 浏览器的隐私设置中清除缓存。我尝试过在故障排除过程中的某个时间点重启电脑,尽管此时我不记得具体时间了。我尝试过在 Windows 网络诊断程序可用时运行它,但它没有发现任何东西
问题:
- 我错过了什么?
- 我需要做什么才能真正摆脱旧的、过期的证书?
- 有什么方法可以消除 MMC 生成的证书上的黄色警告?我尝试取消选中使密钥用途变得关键,但这没有任何区别。我认为它们在现在的 MMC 生成的证书上被标记为关键。
- 问题可能仅仅是证书过期,与 SAN 根本无关吗?
- 拥有两个证书有问题吗?
答案1
- 是的,评论者 @ChanganAuto 说得对,“我忽略了最重要的事情。”虽然我一直专注于树木,但周围的森林是 Windows 7 和 IIS 7.5 已经过时了,并且与现代浏览器确实不兼容。
我的朋友比我更落后。他有一个 WinXP 的虚拟副本,他仍然用它来收发电子邮件,并且乐于使用旧版本的 IE 与他开发的网站副本上的管理页面进行交互;而我正在慢慢转向 Win10——现在也老了——但到目前为止只过渡到了一些在 Win7 上无法再执行的任务。我们俩都不是特别担心我们本地主机网站副本的安全性(SSL/TLS 在托管网站上运行良好),我们每个人都有自己的系统来降低旧电脑一般在线使用的风险。
通过转到 IIS 管理器中的站点,单击右上角的“绑定”,突出显示 https,然后选择其中一个未过期的证书,即可解决过期证书持久性问题。
使用 OpenSSL 3.0 创建自签名根 CA 证书和单独的服务器证书,将 CA 证书作为受信任的根 CA 导入 MMC 的证书管理器并将其导入 Firefox,然后使用 CA 证书对服务器证书进行签名,解决了 MMC 生成的证书的密钥使用黄色警告。
不幸的是,当我使用 OpenSSL 从服务器证书及其私钥创建 .pfx 文件并尝试将其导入 IIS 时,出现了一个新问题。我一直收到一条错误消息“指定的网络密码不正确”。通过在将证书和私钥导出到 .pfx 文件时为其指定向后兼容的加密,解决了这个问题。最终起作用的 OpenSSL 命令是 openssl pkcs12 -export -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -inkey IISserver2.key -in IISserver2.crt -out IISserver2-legacy.pfx -name "IIS 服务器 - Win7 Legacy" 特别是,-nomac 选项似乎是强制性的。
- 经过所有这些,HTTPS 页面仍然无法正常工作,因此 SAN 本身并不是问题,证书过期也不是问题,启用 TLS 1.1 和 1.2 也不是问题。当前错误消息是 SSL_ERROR_RX_UNEXPECTED_HELLO_REQUEST,Firefox 和 Chrome 都不会透露更多信息。我猜浏览器和服务器无法就密码和算法达成一致,此时我认为我已经浪费了我关心的所有时间。
有人在某处发帖称,使用 OpenSSL 1.1(我认为是)而不是 3.0 解决了他的兼容性问题,这当然听起来很荒谬,但这不是针对公共网站的,只是针对用于测试本地主机副本且只需要模拟安全性的过时计算机。因此,我可能会在某个时候尝试这样做,但现在还不行。
- 导入两个证书到 IIS 都没有问题,网站上只有一个证书绑定到 HTTPS。