环境:
报告服务运行在安装有SQL Server 2008 R2 SP3的Windows 2008服务器上,.Net 4.6.1已安装并启用了功能中的.NET 3.5。IIS,数据库和报告服务都在本地机器上(自定义登录URL在另一台机器上,但似乎与此无关)。
所做的更改:
由于安全原因,我们被迫转移到TLS 1.2,因此我们使用IISCrypto仅启用了TLS 1.2
结果:
从此刻起,仅在尝试访问报告管理站点时才会出现错误。在浏览器上,我们会收到错误500,显示:
底层连接已关闭:接收到意外错误
在SSRS日志中,我们可以看到以下异常:
System.Net.WebException: 底层连接已关闭:接收到意外错误。---> System.ComponentModel.Win32Exception: 客户端和服务器之间不能通信,因为它们没有共同的算法
调用堆栈始于ReportServer OnInit(),因此它不会立即失败,并且该错误发生在报告服务初始化时。
在.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生成的自定义签名证书也没有帮助。
重要提示: 问题只发生在报告服务管理站点上,报告工作正常。
下一步操作
还有其他尝试的想法吗?是否有一种方法可以知道为什么没有选定安全包?
更新
该问题与TLS1.2无关,因为再次启用TLS 1后我仍然遇到同样的错误。 我猜登录URL某种方式涉及其中。
curl -v --tlsv1.2 --cert myclientcert.pem https://<yoururl>
,你需要确保这不是浏览器相关问题,并首先使用curl进行调试。 - Tarun Lalwani