我的问题很简单,我已经阅读了这两个主要页面:
但是从第一个链接开始,它显示了在global.asax.cs中设置的SecurityProtocol的配置以便解决
“System.Net.WebException:请求已中止:无法创建 SSL / TLS安全通道。“
在这里,我希望这个配置在 web.config / app.config 中设置,只是为了让它有点特定于自己的项目而不是所有的asp.net项目...然后我认为第二个链接{msdn.microsoft.com .....}就是这样,但SSL / TLS错误仍然存在......所以我的问题如何通过web.config实现以下?
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
我也读过这个页面Force by config to use tls 1.0 in a wcf client c#,但没有答案。
然后......我刚刚找到这些页面:
然后我实现我的自定义绑定:
<customBinding >
<binding name="SureTaxSoap">
<sslStreamSecurity requireClientCertificate="true" sslProtocols="Ssl3|Tls|Tls11|Tls12" >
</sslStreamSecurity>
</binding>
</customBinding>
但sslProtocols =“Ssl3 | Tls | Tls11 | Tls12”未识别
答案 0 :(得分:3)
通常,使用Enum.Parse
或Enum.TryParse
从web.config中的字符串转换枚举。我希望(但尚未检查参考源确认)WCF设置也是如此。
Enum.Parse
使用逗号分隔基于标志的枚举值,但如果需要,也可以将等效的整数值解析为字符串。
因此,如果您的问题是在web.config设置中连接基于标志的枚举值,您可以使用逗号分隔,例如:
sslProtocols="SSl3, Tls"
sslProtocols="SSl3, Tls, Tls11, Tls12"
或者,如果您的问题是Tls12
不是公认的值,那么这只是在.NET 4.5中添加的。如果您正在为.NET 4.0进行编译,那么它将无法解析为命名枚举。但是,.NET 4.5是4.0的就地更新,因此如果您安装了4.5 ,则可以解析数值:
sslProtocols="4080"
这取自System.Net.SecurityProtocolType
枚举的所有数值的总和。这些数值也与System.Security.Authentication.SslProtocols
和System.IdentityModel.SchProtocols
中的值相同,因此我猜测它们在您的情况下是相同的。
Ssl3 = 48,
Tls = 192,
Tls11 = 768,
Tls12 = 3072
当然,如果您可以使用它,那么升级到至少Visual Studio 2012 / .NET 4.5可能会更清晰,其中命名字符串应该可用。
答案 1 :(得分:0)
我经历过同样的事情,我只使用一个SSL / TLS协议使其工作。
例如,如果您需要最强大的安全协议,则sslProtocols =“Tls12”。
否则,如果我们不需要指定SSL协议,则默认为.Net4.5中的TLS1
答案 2 :(得分:0)
sslProtocols="Ssl3|Tls|Tls11|Tls12"
无效(在web.config中)
但它在Visual Studio 2015(.Net Framework 4.5.2)中可用