【发布时间】:2021-03-26 07:43:27
【问题描述】:
我有一个奇怪的问题。我有一个我自己没有构建的外部 dll,因此无法访问通过 https 调用某种 Web 服务并使用 .pfx 证书进行身份验证的源代码。它似乎使用普通的 WebRequest.Create 调用。它在我的开发机器上运行良好,但是当我将它移动到 QA 机器(Azure VM)时,它会因错误而失败,
请求被中止:无法创建 SSL/TLS 安全通道。
在事件日志中,
创建 TLS 客户端凭据时发生致命错误。内部错误状态为10013
在服务器上(由许多其他网站共享)我检查了注册表设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
并且1.2是启用的,但所有其他协议都被禁用并且没有特殊设置,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v4.0.30319
现在有趣的是,我制作了一个小型控制台应用程序,它与网站执行相同的操作,并且当我运行它时它在服务器上运行良好,并且如果我将应用程序池用户从指定用户更改为我自己的用户我用来连接网站服务器的用户也运行良好。我没有进行任何注册表更改,我很高兴尝试让托管团队进行更改并尝试,但首先我想尝试了解应用程序如何与一个用户一起工作,但如果它是注册表,则不能与另一个用户一起工作非用户特定的设置。或者是否可以对该问题进行其他解释。
编辑:我们为网站和测试控制台应用程序运行 .NET Framework 4.7.2。
【问题讨论】:
-
今年 6 月的一次安全推送禁用了服务器上的 TLS 1.0/1.1。但是客户端仍然默认使用旧版本。看起来目标网络是 4.0,它绝对不支持 TLS 1.2 的加密算法。正常的解决方法是在代码开头添加 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;所以客户端只请求 TLS 1.2。由于您使用的是 dll,因此不确定这是否可行。
-
您运行的是哪个版本的 .NET Framework? 4.5.2?在那之前或之后?
-
使用 .NET Reflector 等商业工具反编译该程序集,然后对其进行调试。如果不这样做,我认为不可能有一个简单的答案。
-
这个问题可能和.net框架有关,MSDN上有类似的问题,可以参考:social.technet.microsoft.com/Forums/en-US/…
-
我们使用 Framework 4.7.2 并尝试使用 ServicePointManager 但没有成功。但它开始感觉这是一个文件访问问题 (forums.iis.net/t/1233122.aspx)。这可以解释为什么它可以与其他用户一起使用。
标签: c# asp.net windows iis tls1.2