[英]Restrict anything but TLS 1.2 serverside WCF
我有一个简单的问题,但在任何地方都找不到答案。 我有一个 WCF 服务器应用程序。 我希望它只使用 TLS1.2。
我无法控制客户端,也无法编辑机器上的 SCHANNEL 设置。
我已经尝试过以下似乎仅适用于传出连接(客户端)的方法
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,
ClientCredentialType = MessageCredentialType.Windows
}
}
};
}
如果有人能告诉我在哪里检查当前连接的 TLS 版本(某些上下文),那就足够了!
先感谢您!
在SecurityProtocol
旁边的ServicePointManager中确实有一些属性在身份验证步骤中检查,但它们都是internal
。 似乎也没有可见的后门来覆盖SslStream
或TcpTransportSecurity
的整个实现,它们正在实现NetTcpBinding
的传输安全框架。
public partial class ServicePointManager {
...
internal static bool DisableStrongCrypto
internal static bool DisableSystemDefaultTlsVersions
internal static SslProtocols DefaultSslProtocols
...
}
如果您拥有服务器机器注册表的写入权限,请查看 @JohnLouros 一年前在他关于如何禁用弱协议和如何启用强密码学的帖子中很好地描述的内容。
这是来自@MattSmith 的另一个很好的答案,描述了操作系统本身如何在幕后处理NetTcpBinding
的身份验证。
你试图在IIS中禁用PCT 1.0,SSL 2.0,SSL 3.0或TLS 1.0吗? 您可以按照: 如何在Internet信息服务中禁用PCT 1.0,SSL 2.0,SSL 3.0或TLS 1.0
您是否尝试使用ServicePointManager.ServerCertificateValidationCallback 。此回调使您有机会自己验证服务器证书。例如,如下所示:
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...
static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
//Your logic here for certificate validation
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.