我正在尝试通过TLS 1.2协议填充REST请求并出现问题:
请求已中止:无法创建SSL / TLS安全通道
1)应用程序托管在Windows 2016服务器上
2)注册已启用HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols \ TLS 1.2文件夹中启用的服务器和客户端配置
3)应用程序被迫使用TLS协议
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
4)应用程序在.Net 4.7上运行
任何想法我都会很合适
谢谢
答案 0 :(得分:0)
确保检查所有这些注册表设置
计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319
计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography \ Configuration \ SSL \ 00010002
计算机\ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols \ TLS1.2 \ Server
通常,除非明确配置协议版本,否则WCF框架会自动选择TLS 1.2之前可用的最高协议。但是,尽管我们没有注意到,调用REST API的行为可能有所不同。
在我们的案例中,这不是必需的
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
但这是:
<system.web>
<compilation targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
<customErrors mode="Off" /> </system.web>
以及这个:
<basicHttpBinding>
<binding name="HTTPSEndpoint" messageEncoding="Text">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" />
</security>
</binding>
希望这会有所帮助。
参考文献:
Enable TLS 1.2 for specific Ciphers
.Net Framework 4.6.1 not defaulting to TLS 1.2
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls https://blogs.msdn.microsoft.com/friis/2017/10/09/troubleshooting-tls-ssl-scenario-2/ https://textslashplain.com/2015/10/12/viewing-https-handshakes-in-fiddler/