“身份验证失败,因为远程方已关闭普通用户的传输流”

时间:2017-02-09 19:25:25

标签: c# wcf ssl

第三方供应商正在添加身份验证(yay!),但它并不总是适用于我们(嘘!)。

当C#应用程序以“管理员”身份运行时,它可以正常运行 。但是,当应用程序作为普通(非管理员)用户运行时,它将失败并显示消息

“身份验证失败,因为远程方已关闭传输流”

我们明确设置为TLS 1.2

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

我们

  • 执行4.6 .NET C#WCF客户端
  • 使用HTTPS网络服务
  • 使用TLS1.2
  • 在Windows Server 2012平台上

2 个答案:

答案 0 :(得分:3)

我们在Getting "Could not establish secure channel for SSL/TLS with authority" even though ServerCertificateValidationCallback returns true以及winhttpcertcfg giving access to IIS user in Windows 7的帮助下找到了它。

问题是为“计算机”帐户的受信任的人安装了证书。在管理员模式下运行时,或作为具有管理员权限的用户运行时,它运行正常。但是,当我们作为“服务帐户”运行时(在引号中,因为它不是真正的服务帐户) - 服务帐户没有读取证书的权限。

我们发现挖掘C:\ProgramData\Microsoft\crypto\rsa\machinekeys目录并更改相应证书的读取权限。

我们不喜欢使用icacls来改变已安装证书的读取权限的建议解决方案(部分原因是实际找到正确的证书条目的艰巨任务。)

我们发现我们可以将mmc.exe作为服务帐户运行,然后将其安装到该帐户的受信任人级别。 然后 我们的非管理员应用程序可以读取证书并建立连接。

答案 1 :(得分:0)

这可能与OP原始问题不同但我的问题是我使用Windows身份验证模拟我的IIS应用程序所以它试图通过模拟访问C:\ProgramData\Microsoft\crypto\rsa\machinekeys中的证书文件没有权利的用户。

我更改了设计以关闭模拟,此问题不再存在。