2017-03-24 50 views
10

hiçbir şeyi kısıtla. Basit bir sorum var ama hiçbir yerde bir cevap bulamıyorum. Bir WCF-Sunucu Uygulaması var. SADECE TLS1.2 kullanmasını istiyorum.TLS 1.2 sunucularından WCF

İstemci üzerinde hiçbir denetimim yok ve makinedeki SCHANNEL ayarlarını düzenleyemiyorum.

Zaten iş gibi görünüyor aşağıdakileri deneyin vermedi sadece giden bağlantıları (clientside) için

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

kod başına TLS 1.2 serverside başka bir şey kısıtlamak için herhangi bir yolu var mı?

DÜZENLEME: Böyle Ben bağlayıcı bir net.tcp kullanarak ve oluşturmak am bağlamaları:

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 
       } 
      } 
     }; 
    } 

birisi nerede şimdiki bağlantının TLS Versiyon (bazı bağlamı) kontrol etmek söyle olsaydı olurdu ayrıca yeterli!

Teşekkürler!

+0

İyi bir WCF sorusuna tökezlediğimden beri bir süre oldu! – iamkrillin

+0

Sorununuzun [.NET Framework 4.7] (https://msdn.microsoft.com/en-us/library/ms171868 (v = vs.110) .aspx # v47) adresinde ele alındığı anlaşılıyor. ** Yapılandırma yeteneği varsayılan mesaj güvenlik ayarları TLS 1.1 veya TLS 1.2 ** –

cevap

0

Eğer ServicePointManager.ServerCertificateValidationCallback .Bu geri arama size böyle yourself.For örnek şey tarafından sertifikasıiçinde doğrulamak için bir fırsat verir kullanmayı deneyin mü:

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

Bu yönteme basmaz. Muhtemelen bir net.tcp bağlayıcı kullanıyorum ve https kullanmıyorum? – Dominik

0

Eğer PCT 1.0, SSL devre dışı bırakmaya çalışıyor yaptılar IIS 2.0, SSL 3.0 veya TLS 1.0? How to disable PCT 1.0, SSL 2.0, SSL 3.0, or TLS 1.0 in Internet Information Services

+0

IIS kullanmıyorum, kendiliğinden barındırılan tüm – Dominik

+0

sevgili @Dominik sanırım her türlü pencere ortamı için çalışıyor. çünkü kayıt defterini etkiliyor ama emin değilim. – David

+0

Üzgünüm, açmamıştım bile. Sorgumda daha önce belirttiğim gibi, – Dominik

1

gerçekten doğrulama adımı sırasında kontrol edilir SecurityProtocol yanında ServicePointManager birkaç özellik vardır, ancak hepsi internal şunlardır: bunu takip edebilirsiniz. Ayrıca, NetTcpBinding için Aktarım Güvenliği'nin iskeletini uygulayan SslStream veya TcpTransportSecurity tüm uygulamasının geçersiz kılınması için görünür arka kapı bulunmuyor. Sunucu makine kayıt için yazma izniniz varsa

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

, @JohnLouros how to disable weak protocols ve how to enable strong cryptography yaptığı mesajların bir yıl önce çok iyi tanımladığı göz atın.

@MattSmith adlı kullanıcıdan answer numaralı bir başka iyi olan, NetTcpBinding için kimlik doğrulamanın işletim sisteminin kendisi tarafından perde arkasında gerçekleştirildiğini açıklar.

+0

Hmm kayıt defterinde herhangi bir şeyi düzenlememe izin verilmemesine rağmen, enum değeri ayarlayarak müşteri üzerinde yapabileceğim bir şey yapmak gerçekten mümkün görünmüyor. Dürüst olmak gerekirse, bu noktada .NET framework ile hayal kırıklığına uğrattım. Belki de doğru bir şey anlamadığım da olabilir. – Dominik

+0

Bu yüzden, topluluğun katkıda bulunmak için kendi kodunun açılmasının çok anlamlı olduğunu düşünüyorum. Bunu takıma bildirebilmeli, hatta çekebilmeli ve gerekli değişiklikleri kendiniz yapabilmelisiniz. –