限制除TLS 1.2服务器端WCF之外的任何内容

时间:2017-03-24 13:21:27

标签: c# wcf ssl tls1.2

我有一个简单的问题但无法在任何地方找到答案。 我有一个WCF服务器应用程序。我希望它只使用TLS1.2。

我无法控制客户端,无法在机器上编辑SCHANNEL设置。

我已经尝试过以下内容,它似乎仅适用于传出连接(clientside)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

有没有办法限制除了每个代码的TLS 1.2服务器端以外的任何东西?

编辑: 我正在使用net.tcp绑定并创建类似的绑定:

private static Binding CreateNetTcpBinding()
    {
        return new NetTcpBinding
        {
            ReceiveTimeout = TimeSpan.FromMinutes(10),

            ReliableSession =
            {
                Enabled = true,
                InactivityTimeout = TimeSpan.FromMinutes(1)
            },
            Security =
            {
                Mode = SecurityMode.Transport,
                Transport =
                {
                    ClientCredentialType = TcpClientCredentialType.Windows,
                    ProtectionLevel = ProtectionLevel.EncryptAndSign,
                    SslProtocols = SslProtocols.Tls12
                },
                Message =
                {
                    AlgorithmSuite = SecurityAlgorithmSuite.xxx <-- not here on purpose,
                    ClientCredentialType = MessageCredentialType.Windows
                }
            }
        };
    }

如果有人可以告诉我在哪里查看当前连接的TLS版本(某些上下文),这也足够了!

提前谢谢!

3 个答案:

答案 0 :(得分:1)

SecurityProtocol旁边的ServicePointManager确实存在一些属性,这些属性在身份验证步骤中会被检查,但它们都是internal。似乎没有可见的后门覆盖SslStreamTcpTransportSecurity的整个实现,它们正在为NetTcpBinding实现传输安全性的骨架。

public partial class ServicePointManager {
    ...
    internal static bool DisableStrongCrypto
    internal static bool DisableSystemDefaultTlsVersions 
    internal static SslProtocols DefaultSslProtocols
    ...
}

如果您拥有服务器计算机注册表的写入权限,请在how to disable weak protocolshow to enable strong cryptography的帖子中查看@JohnLouros一年前所描述的内容。

这是来自@MattSmith的另一个好answer,描述了操作系统本身在幕后如何处理NetTcpBinding的身份验证。

答案 1 :(得分:0)

您是否尝试使用 ServicePointManager.ServerCertificateValidationCallback 。此回调为您提供了自行验证服务器证书的机会。例如:

ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; 
    ... 
static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) 
{
     //Your logic here for certificate validation 
}

答案 2 :(得分:0)

您是否尝试在IIS中禁用PCT 1.0,SSL 2.0,SSL 3.0或TLS 1.0? 你可以这样说:How to disable PCT 1.0, SSL 2.0, SSL 3.0, or TLS 1.0 in Internet Information Services