asp.net - ASP.NET Webforms - 将 SSL 证书绑定到站点后,文件下载和 SSRS 报告显示功能失败
问题描述
概括
环境:Windows Server 2016、IIS 10、ASP.NET webforms 站点、通配符 SSL/TLS 证书、IIS URL Rewrite 2.1(支持 MS 下载)
目标:a) 确定并解决问题的根本原因,b) [首选] 在用户无需更改浏览器设置的情况下让两个失败的功能正常工作,c) 让两个失败的功能正常工作,期间,无需无处不在的浏览器(Chrome、FF、Edge、IE、Safari、Opera)上的首次处理问题。
问题摘要:站点的两个功能,即下载文件和显示 SSRS 报告因首次处理错误而失败或完全失败,具体取决于浏览器,SSL 证书绑定到站点。在大多数情况下,在同一浏览器窗口中执行这些功能的后续尝试都会成功。各种浏览器以不同的方式出现故障,有些浏览器根本不会出现故障,具体取决于所讨论的浏览器。请耐心等待我尝试在下面提供详细信息。
注意:如果没有 SSL 证书,这两个功能都可以正常工作。
我已经在互联网上搜寻了一个无济于事的解决方案,并且非常感谢您对此提供的任何帮助。
细节
我有一个带有 ASP.NET Webforms 站点的客户端,该站点包含文件下载和 SSRS 报告显示功能。用户必须登录才能访问这些功能。可悲的是,最初的开发人员实施了一种基本的、本土化的用户身份验证方法,即它不是一个“正式的”身份验证框架,而只是将提供的用户名/密码对与存储在数据库中的值进行简单比较......没有正式的身份验证据我所知,令牌已设置...这可能是问题的一部分吗?
多年来,使用所有当前的主流浏览器,上述两个功能都可以完美运行。我的客户最近购买了我在生产 IIS 实例上安装的通配符 SSL/TLS 证书并配置了适当的站点绑定。万一这很重要,该站点还在 web.config 中使用带有基本规则的 URL 重写来将所有 HTTP 协议请求修改为 HTTPS 协议。
除了文件下载和 SSRS 报告显示外,网站的所有方面都可以在 SSL 证书到位的情况下正常工作。当前版本的 Chrome 和 Firefox [Windows] 以及 Mac 浏览器(我没有第一手的 Mac 环境访问权限)正在表现出错误行为。IE 11 (go figure) 似乎是唯一没有任何问题的浏览器。我没有测试 Edge,因为我无法访问那个浏览器版本。
文件下载
该站点具有允许登录用户从该站点下载文件的功能。
铬合金
Chrome 在浏览器底部的下载状态栏中显示首次处理错误“失败 - 网络错误”。单击错误消息中的 V 形并从上下文菜单中选择“恢复”选项会完成下载,但是,任何从其实际文件夹位置打开(双击)zip 存档的尝试都会导致以下错误消息:“Windows 无法打开文件夹。压缩(压缩)文件夹“{path}”无效。” 在十六进制编辑器中分析 zip 文件显示它包含网页源代码,而不是预期的文件下载。在同一个浏览器窗口中重复文件下载操作可以正常工作(最终成功下载,文件的有效 zip 存档)和所有后续文件下载尝试也成功,在该浏览器实例的剩余生命周期内没有进一步的问题。如果用户关闭他们的浏览器(必须关闭所有 Chrome 实例)然后重新打开浏览器导航到该站点的 Chrome,浏览器再次出现首次处理错误,然后从那时起在余生中正常工作那个浏览器窗口。
注意:必须关闭 Chrome 浏览器的所有实例才能再次重现该问题。如果用户在他们的计算机上打开一个 Chrome 实例,然后使用新的浏览器窗口导航到该站点并重试文件下载,则没有问题。也许 Chrome 正在缓存某种身份验证令牌?我故意回避使用“会话”一词,因为该行为似乎与会话无关。在 Chrome 中打开一个新选项卡(在经历了上述首次处理行为之后)并导航到该站点(在一个新会话中达到高潮)不会出现此问题。
火狐
Firefox 在尝试从站点下载文件时显示“安全连接失败”错误消息。所有后续尝试继续失败。这与 Chrome 的仅首次处理行为不同。将 Firefox 高级首选项“network.http.spdy.enabled.http2”从 true(默认值)修改为 false 可以永久解决该问题。
即 11
IE 11 完全没有失败。IE 11 的默认安装未更改任何浏览器设置。
Mac 浏览器
Mac 用户报告说文件下载尝试似乎成功,但尝试打开 zip 存档在 Mac 环境中达到高潮,认为 zip 存档受密码保护。注意:在处理下载请求的代码中,没有明确为 zip 存档分配密码。Windows 环境中没有用户报告此行为。
SSRS 报告显示
该站点具有允许登录用户显示在运行时从 SSRS 创建的 PDF 文档的功能。PDF 直接显示在浏览器窗口中(而不是立即启动下载操作)。
铬合金
当用户尝试显示 SSRS 报告时,Chrome 会显示类似的首次处理错误。浏览器显示以下错误消息:“错误加载 PDF 文档失败。” 错误消息有一个“重新加载”按钮,最终导致报告成功显示。随后在同一浏览器窗口中显示报告的所有尝试都成功,没有进一步的问题。当用户关闭并重新打开 Chrome 到该站点并重试报告显示时,再次体验到首次处理行为。
注意:有趣的是,在具有任一功能(文件下载或 SSRS 报告显示)的 Chrome 中,一旦用户遇到了任一功能的首次处理问题,那么另一个功能在该功能的生命周期内都可以正常工作浏览器实例。示例:用户打开新的 Chrome 实例,导航到站点并尝试下载文件。第一次下载文件会失败。立即尝试显示报告成功......反之亦然。
火狐
Firefox 显示与文件下载功能相同的“安全连接失败”错误消息。将相同的 Firefox 高级首选项“network.http.spdy.enabled.http2”从 true(默认值)修改为 false 可以永久解决该问题。
即 11
IE 11 完全没有失败。IE 11 的默认安装未更改任何浏览器设置。
解决方案
推荐阅读
- node.js - 当拥有多个数据库连接时,Nest 无法解析 Repository 的依赖关系
- javascript - 我如何制作 react-create-app 来缩小我的代码?
- error-handling - VBScript - 验证输入是 IP,每八位字节 3 位
- processing - 有条件地改变圆圈大小会创建多个圆圈
- javascript - React Native - 创建 N 个动画值
- javascript - 通过 Node.js JSON 输出从 Asana Task API 中提取特定项目 ID
- python - Python 无法从照片 Linux 中提取数字
- python - 按顺序迭代 DataFrame 日期组,参考上一组
- c - char ** 指针中的段错误(学习 malloc 和指针的用法)
- c - 从文件中读取数据的问题,一个简单的C语言代码