第三方供应商正在添加身份验证(yay!),但它并不总是适用于我们(嘘!)。
当C#应用程序以“管理员”身份运行时,它可以正常运行 。但是,当应用程序作为普通(非管理员)用户运行时,它将失败并显示消息
“身份验证失败,因为远程方已关闭传输流”
我们明确设置为TLS 1.2
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我们
答案 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
中的证书文件没有权利的用户。
我更改了设计以关闭模拟,此问题不再存在。