我有一个在 IIS 7.5 中运行的 ASP 应用程序。由于 Windows 7 的 EoL,我不得不升级到 Windows 10 和 IIS 10。一切似乎都已准备就绪,但现在 ASP 网站或任何其他网站都可以正常工作,除非使用 https。到目前为止,Firefox 给出了 PR_CONNECT_RESET_ERROR,Chrome 返回了 ERR_SSL_PROTOCOL_ERROR,Edge 返回了 Hmmm 无法访问此页面。
一些答案指出了 ARR Rewrite 模块,我卸载了它,并在重新启动后重新安装更新后的版本,结果相同。我最终卸载了它(不再需要它)并重新启动。我重新安装 IIS,消除了 Windows 功能,重新启动并重新安装 IIS 并重新启动。我消除了所有证书并创建了一个自签名证书,但问题仍然相同。最后,我从该 Web 服务器上删除了所有网站,并在默认目录(wwwroot,其中包含一个 html 文件和两个图像)上创建了一个新网站,只要使用 http 协议就会显示,但不显示 https(同样的错误)。我跟着本指南适用于 IIS 7,但没有什么用。重新安装后,我还撤销并重新授予 IUSR 对文件夹的权限。最后,我禁用了防病毒软件的 SSL 过滤,但没有什么变化。
最初使用的证书是使用 openssl 在内部完成的,用于生成公司范围的根证书、中间证书和机器证书,这些证书在升级之前一直运行良好。目前,正如我所说,即使使用自签名证书,也无法使用任何使用的浏览器来提供最简单的内容。我不知道该检查什么。
这是我从 IIS 获得的跟踪
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-01-20 20:12:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2020-01-20 20:12:22 192.168.1.100 GET / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 - 200 0 0 2687
2020-01-20 20:12:22 192.168.1.100 GET /iisstart.png - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 http://devmachine.company.local/ 200 0 0 12
2020-01-20 20:12:22 192.168.1.100 GET /favicon.ico - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 - 404 0 2 5
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-01-20 12:26:37
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2020-01-20 20:12:22 ::1 GET / - 443 - ::1 Microsoft+Windows+Network+Diagnostics - 200 0 0 996
2020-01-20 20:12:22 192.168.1.100 HEAD / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 - 200 0 0 19
2020-01-20 20:27:38 192.168.1.100 GET / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 - 200 0 0 8
2020-01-20 20:27:38 192.168.1.100 GET /iisstart.png - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 http://devmachine.company.local/ 200 0 0 50
2020-01-20 20:27:38 192.168.1.100 GET /favicon.ico - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 http://devmachine.company.local/ 404 0 2 19
如您所见,只有 http 可以工作,(我再次尝试更改时间以查看时钟是否存在问题,但事实并非如此。Chrome 对 http 提出了投诉,因此时钟没有问题)但没有 https 的踪迹。
答案1
我自己找到了答案。问题是多年来密码已经改变,但只有 Windows 2012 和 2016 服务器进行了适当的更新,而旧版本则没有,Windows 10 已经有了这些条目并进行了相应更新。因此,升级后,一些不存在的注册表项会影响 IIS 中 SSL 的处理方式。要测试是否是这种情况,请在 Firefox 中打开一个新选项卡,输入 about:config 并搜索 security.tls.version.max 并将其设置为 3 并保存。如果您尝试访问该网站,它会正常工作,或者至少会显示证书不正确的常见警告。如果是这样,则撤消 Firefox 中的更改并执行所示的解决方案这里;无论如何我都要描述它,以防这些页面被遗忘或删除。
整个问题已得到解决,通过更新注册表中的以下条目,应该创建或更改这些条目,具体取决于您是否之前已经对 Web 服务器的强度安全性进行了部分更改。
更新 WinHTTP
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
如果尚未启用 TLS 1.2,请启用
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
如果你的应用程序是 64 位操作系统上的 32 位应用程序,那么也需要修改
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
如果尚未启用 TLS 1.2,请配置 SCHANNEL 协议
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault" = dword:00000000
"Enabled" = dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault" = dword:00000000
"Enabled" = dword:0xffffffff
如果要支持旧版应用程序/浏览器,请确保 TLS 1.1 与 TLS 1.2 相同。建议禁用弱密码(如 SSL),如果可以,则禁用 TLS 1.0(客户端和服务器的 DisableByDefault = dword:00000001 Enabled=00000001。这些条目位于 TLS 1.0 中,与 TLS 1.1 和 TLS 1.2 处于同一级别),然后重新启动计算机。
如果一切顺利,您的应用程序将再次运行,或者至少会显示由于自签名证书而导致的常见安全风险消息。希望这对您有用,如果它能帮助您解决问题,请投票,提前致谢。
注意:您可以使用此处提供的脚本设置/清除正确的 regedit 值:https://www.hass.de/content/setup-microsoft-windows-or-iis-ssl-perfect-forward-secrecy-and-tls-12
答案2
在对这篇文章进行了大量搜索之后,我觉得有必要发表一下。它基本上是正确的。
我确实遇到了一些麻烦-所以提出一些建议。
- 使用 MS 网站建议底部的脚本。需要以管理员身份运行。
- 如果脚本不起作用,请删除您创建的所有密钥,然后重试该脚本。
最后,如果您在更新到 Server 2019 时出现了问题,并且您的 IIS 服务器正在连接到 SQL 2012 服务器,请确保已修补到 SP4。:)