Ограничить все, кроме TLS 1.2 serveride WCF
У меня есть простой вопрос, но я не могу найти ответ нигде.
У меня есть приложение WCF-Server. Я хочу, чтобы он использовал ТОЛЬКО TLS1.2.
У меня нет контроля над клиентом, и я не могу редактировать настройки SCHANNEL на машине.
Я уже пробовал следующее, которое, похоже, работает только для исходящих соединений (clientside)
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Есть ли способ ограничить что-либо, кроме сервера TLS 1.2 на один код?
EDIT:
Я использую привязку 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-версию текущего соединения (некоторый контекст), который также будет достаточным!
Заранее благодарю вас!
Ответы
Ответ 1
Есть действительно несколько свойств в ServicePointManager рядом с SecurityProtocol
, которые проверяются на этапе аутентификации, но все они internal
. Также нет видимого бэкдора для переопределения всей реализации SslStream
или TcpTransportSecurity
, которые реализуют скелет безопасности безопасности для NetTcpBinding
.
public partial class ServicePointManager {
...
internal static bool DisableStrongCrypto
internal static bool DisableSystemDefaultTlsVersions
internal static SslProtocols DefaultSslProtocols
...
}
Если у вас есть разрешение на запись в реестр серверных машин, ознакомьтесь с тем, что @JohnLouros описал очень хорошо год назад в своих сообщениях на как отключить слабые протоколы и как включить сильную криптографию.
Вот еще один хороший ответ от @MattSmith, описывающий, как аутентификация для NetTcpBinding
обрабатывается самой операционной системой за кулисами.
Ответ 2
Вы пытались использовать ServicePointManager.ServerCertificateValidationCallback. Этот обратный вызов дает вам возможность самостоятельно проверить сертификат сервера. Например, что-то вроде этого:
ServicePointManager.ServerCertificateValidationCallback = MyCertHandler;
...
static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
//Your logic here for certificate validation
}
Ответ 3
Вы пытались отключить PCT 1.0, SSL 2.0, SSL 3.0 или TLS 1.0 в IIS?
вы можете следить за этим: Как отключить PCT 1.0, SSL 2.0, SSL 3.0 или TLS 1.0 в Internet Information Services