2017-10-18 4 views
3

で応答し、私はHTTPS要求がクライアント証明書認証を使用して、それは私がJavaを使用して同じ要求をしようとしている.NET 4.7は、サーバーがTLS 1.1

The request was aborted: Could not create SSL/TLS secure channel. 

で失敗GETをやろうとしているとき、SSLチャネルを作成するために失敗し、

私は手段を理解するように、いくつかの理由でそのサーバーがTLS 1.2をサポートしていません
*** ClientHello, TLSv1.2 
main, WRITE: TLSv1.2 Handshake, length = 185 

.... 

*** ServerHello, TLSv1.1 
main, READ: TLSv1.1 Handshake, length = 3339 

が、クライアントはそれを受け入れ、単純に落ちている:それは私が(唯一興味深い部分までストリッピング)は、Javaログに以下を参照してください、正常に動作しますTLS 1.1に戻ります。

私は

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11; 

を設定すると、.NETがあまりにも正常に動作します。 今、Javaがそうしたように.NETがTLS 1.1に戻ってこない理由を、何らかの形で(実際にTLS 1.2を試して、例外を捕まえてTLS 1.1を試さずに)有効にできますか?

+1

セットSecurityProtocolへSecurityProtocolType.Tls11 | SecurityProtocolType.Tls12? – Evk

+0

途中でこのコードを実行するマシンにインストールされているWindowsのバージョンは何ですか? – Evk

+0

Windows 10 15063.608 – Giedrius

答えて

2

ServicePointManager.SecurityProtocolの説明では、デフォルト値が目的で、このプロパティに表示されていないことを

注記載されています。 既知の の弱点を回避するために、セキュリティの状況は絶えず変化しており、既定のプロトコルと の保護レベルは時間とともに変化します。デフォルトは、個々のマシン の設定、およびどのソフトウェアがインストールされており、 のパッチが適用されているかによって異なります。

特定の保護レベルを使用して に暗黙的にコードを設定したり、既定で特定の セキュリティレベルが使用されていることを前提としてコードを暗黙的に使用しないでください。アプリが特定のセキュリティレベルの の使用に依存する場合は、そのレベルを明示的に指定し、 が実際に確立された 接続で使用されていることを確認する必要があります。さらに、 の脅威を緩和するために、多くの場合、事前通知なしで の変更が行われているため、プロトコルがサポートされている変更については、 の面で堅牢になるように設計する必要があります。

ながら、.NET 4.7でこのプロパティのデフォルト値はSystemDefaultsource)とSystemDefaultは、 "デフォルトのプロトコルのリストについてOSを尋ねる"(およびTLS 1.1およびTLS 1.2がenabledをしているのWindows 10上で)を意味する必要があります - これは、値は複数の外部ソース(レジストリキーや、インストールされたソフトウェアや適用されたパッチによっても上記のように)の影響を受けます。私たちがコメントで説明したように、何らかの理由でデフォルトでSsl3 | Tlsという文字列を持っています。これは、Ssl3が安全でないため無効にする必要があるためです。だから、(そして将来このような場合には)あなたの問題を解決するために

- あなたが必要とする常にリスト・プロトコル、デフォルトの設定が信頼できないので、あなたが、複数のクライアントマシン上であなたのapplicaitonを公開する場合は特に:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 
+0

また、Windows 10でも.net 4.7と同じ問題があるようです。https://stackoverflow.com/questions/44751179/tls-1-2-not-negotiated-in-net-4-7-without -explicit-servicepointmanager-security/44765698#44765698 – Giedrius

+0

@Giedrius確かに。しかし、これは一貫していないようです。たとえば、私はあなたと同じWindowsバージョンを持っていますが、.NET 4.7ではデフォルトでSystemDefaultを持っています – Evk

関連する問題