我有一个简单的问题但无法在任何地方找到答案。 我有一个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版本(某些上下文),这也足够了!
提前谢谢!
答案 0 :(得分:1)
在SecurityProtocol
旁边的ServicePointManager确实存在一些属性,这些属性在身份验证步骤中会被检查,但它们都是internal
。似乎没有可见的后门覆盖SslStream
或TcpTransportSecurity
的整个实现,它们正在为NetTcpBinding
实现传输安全性的骨架。
public partial class ServicePointManager {
...
internal static bool DisableStrongCrypto
internal static bool DisableSystemDefaultTlsVersions
internal static SslProtocols DefaultSslProtocols
...
}
如果您拥有服务器计算机注册表的写入权限,请在how to disable weak protocols和how 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