环境:
在安装了 .Net 4.6.1 并启用 .Net 3.5 作为功能的 Windows 2008 服务器上的 SQL Server 2008 R2 SP3 安装上运行的 Reporting Services。IIS、数据库和报告服务都在本地机器上(在不同的机器上自定义登录 URL,但似乎这无关)。
所做的更改:
由于安全原因,我们被迫迁移到 TLS 1.2,所以我们使用 IISCrypto 仅启用 TLS 1.2
结果:
从这一刻起,我们仅在尝试访问报告管理站点时才会收到错误消息。在浏览器上,我们收到错误 500 说:
底层连接已关闭:接收时发生意外错误
在 SSRS 日志中,我们可以看到以下异常:
System.Net.WebException:底层连接已关闭:接收时发生意外错误。---> System.ComponentModel.Win32Exception : 客户端和服务器无法通信,因为它们没有共同的算法
调用堆栈在 ReportServer OnInit() 上启动,因此它立即开始失败,并且错误发生在 Reporting Services 初始化时。
在 .Net Framework 上启用跟踪我发现以下消息表明当 SSRS 调用自己的 Web 服务时会发生故障:
System.Net Information: 0 : [5076] HttpWebRequest#38854310 - Request: POST /ReportServer/ReportService2010.asmx HTTP/1.1
System.Net Information: 0 : [4124]
SecureChannel#52830003::.ctor(hostname=themachineshostname, #clientCertificates=0)
System.Net Information: 0 : [4124] Enumerating security packages:
System.Net Information: 0 : [4124] Negotiate
System.Net Information: 0 : [4124] NegoExtender
System.Net Information: 0 : [4124] Kerberos
System.Net Information: 0 : [4124] NTLM
System.Net Information: 0 : [4124] Schannel
System.Net Information: 0 : [4124] Microsoft Unified Security Protocol Provider
System.Net Information: 0 : [4124] WDigest
System.Net Information: 0 : [4124] TSSSP
System.Net Information: 0 : [4124] pku2u
System.Net Information: 0 : [4124] CREDSSP
System.Net Information: 0 : [4124] SecureChannel#52830003 - Left with 0 client certificates to choose from.
System.Net Information: 0 : [4124] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Error: 0 : [4124] AcquireCredentialsHandle() failed with error 0X80090331.
事情已经检查:
使用中的证书仍然有效,并且它的签名链被放置在适当的“中间”和“根”存储中。
以管理员身份运行应用程序池没有帮助。
使用从 IIS 生成的自定义签名证书没有帮助。
重要提示:该问题仅发生在 Reporting Services 管理站点上,报告工作正常
下一步
关于还有什么可以尝试的任何想法?有没有办法知道为什么没有选择安全包?
更新
该问题与 TLS1.2 无关,因为再次启用 TLS 1 我得到了同样的错误。我猜登录 URL 以某种方式涉及。