如何通过web.config实现“SecurityProtocolType.Ssl,Ssl1,Ssl2,Ssl3;”而不是在global.asax.cs中

时间:2016-01-27 03:24:20

标签: asp.net wcf ssl web-config tls1.2

我的问题很简单,我已经阅读了这两个主要页面:

但是从第一个链接开始,它显示了在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”未识别

3 个答案:

答案 0 :(得分:3)

通常,使用Enum.ParseEnum.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.SslProtocolsSystem.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)

Visual Studio 2012(.Net Framework 4.5)中

sslProtocols="Ssl3|Tls|Tls11|Tls12"无效(在web.config中)

但它在Visual Studio 2015(.Net Framework 4.5.2)中可用