2017-03-24 187 views
10

我有一個簡單的問題,但無法在任何地方找到答案。 我有一個WCF服務器應用程序。我希望它僅使用TLS1.2。限制TLS 1.2服務器端WCF

我無法控制客戶端,也無法編輯機器上的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 <-- not here on purpose, 
        ClientCredentialType = MessageCredentialType.Windows 
       } 
      } 
     }; 
    } 

如果有人能告訴我在哪裏查看當前連接的TLS-版(某些情況下),那會也夠了!

預先感謝您!

+0

因爲我偶然發現了一個很好的WCF問題,所以過去了! – iamkrillin

+0

看起來您的問題已在[.NET Framework 4.7](https://msdn.microsoft.com/en-us/library/ms171868(v = vs.110).aspx#v47)中解決 - **能夠配置默認的郵件安全設置爲TLS 1.1或TLS 1.2 ** –

回答

0

你有沒有嘗試使用ServicePointManager.ServerCertificateValidationCallback。這種回調給你一個機會,yourself.For例如像這樣來驗證服務器證書:

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

它並未命中此方法。可能是因爲我使用net.tcp綁定而不是https? – Dominik

0

做你試圖禁用PCT 1.0,SSL 2.0,SSL 3.0或TLS 1.0在IIS中? 你可以按照這個:How to disable PCT 1.0, SSL 2.0, SSL 3.0, or TLS 1.0 in Internet Information Services

+0

我沒有使用IIS,所有自主託管 – Dominik

+0

親愛的@Dominik我想它適用於各種Windows環境。因爲它會影響註冊表,但我不確定。 – David

+0

對不起,我甚至沒有打開它。即使正如我已經在我的問題中已經提到,我不允許編輯註冊表中的任何內容 – Dominik

1

確實有在ServicePointManagerSecurityProtocol旁邊這是在驗證步驟檢查一些屬性,但他們都是internal。似乎還沒有可見的後門來覆蓋SslStreamTcpTransportSecurity的整個實現,它們也正在實現NetTcpBinding的傳輸安全框架。

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

如果您有服務器計算機註冊表寫入權限,檢查出什麼@JohnLouros在他的帖子中描述得非常好一年前的how to disable weak protocolshow to enable strong cryptography

這裏是@MattSmith另一個好answer描述如何爲NetTcpBinding認證過程是由操作系統本身在後臺處理。

+0

嗯...所以它似乎不是真的可以做像我可以在客戶端上設置枚舉值的東西。 說實話,我對.NET框架感到失望。也許這也是我沒有正確理解的東西。 – Dominik

+0

這就是爲什麼我認爲讓它的代碼爲社區貢獻很大意義的原因。您應該能夠向團隊報告這些信息,甚至可以自行解決所需的更改。 –