2017-03-24 20 views
10

私は簡単な質問がありますが、どこでも答えを見つけることができません。 私はWCF-Server-Applicationを持っています。私はTLS1.2だけを使用したい。TLS 1.2 serverside WCF以外のものを制限する

私はクライアントを制御できず、マシンのSCHANNEL設定を編集できません。

私はすでに動作しているよう次のことをしようとしなかった唯一の発信接続(クライアント側)用

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-バージョン(一部のコンテキスト)を確認するために私に言うことができる場合だろうまた十分です!

ありがとうございます!

+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

あなたはこのような何か .Thisコールバックはあなたにyourself.For例でサーバー証明書を検証する機会を与えてくれますServicePointManager.ServerCertificateValidationCallbackを使用しようとしました:

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?あなたはこれに従うことができ :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

は、認証段階中にチェックされているSecurityProtocol横にServicePointManagerでいくつかのプロパティは確かにありますが、それらはすべてinternalです。 NetTcpBindingのトランスポートセキュリティのスケルトンを実装しているSslStreamまたはTcpTransportSecurityの実装全体をオーバーライドする目に見えるバックドアもないようです。

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に彼のポストに1年前に非常によく説明したものをチェックしてください。

@MattSmithのもう1つのanswerは、NetTcpBindingの認証が舞台裏でオペレーティングシステム自体によってどのように処理されるかを説明しています。

+0

うーん...実際にenum値を設定してクライアント上で行うことができるようにはできないようです。 正直言って、私はその点で.NETフレームワークには失望しています。たぶん私は何か正しいことを理解していないかもしれません。 – Dominik

+0

だからこそ私は、貢献するコミュニティのために開かれたコードを理解することが大変だと思います。これをチームに報告したり、必要な変更を自分で実行したりすることもできます。 –

関連する問題