7

环境

在安装了 .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 以某种方式涉及。

4

1 回答 1

4

让我们确保在注册表中正确设置了两件事(在您的报表服务器和 IIS 自定义登录服务器上)。达到设置更改后需要重新启动(一次做一个,看看什么有效)。

注册表中的 TLS 1.2 客户端/服务器启用

转到HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL并确保启用 TLS 1.2 并禁用其他提供程序。如果 TLS 1.2 不存在,则创建它。详情 在这里

确保为 .NET 启用 UseStrongCrypto

转到此处并确保启用了强加密。

注意:我在移动设备上很难输入深入的答案。如果这些东西对您有用,我可以稍后在答案中添加更多细节。

于 2018-04-10T10:01:20.147 回答