狀況
假設您已經在您的電腦上升級到 Microsoft.NET Framework 4.6。當您使用連線到伺服器使用 SSL 3.0 與ServicePointManager或SslStream Api 的應用程式時,連線就會失敗。
原因
因為 SSL/TLS 通訊協定的預設集合所使用的ServicePointManager和SslStream已變更,就會發生這個問題。
舊值︰ Ssl 3.0 |Tls 1.0 |Tls 1.1
新的值︰ Tls 1.0 |Tls 1.1 |Tls 1.2
因應措施
若要解決這個問題,更新伺服器 Tls 1.0、 Tls 1.1 或 Tls 1.2,因為 SSL 3.0 已顯示為不安全且容易遭受攻擊,例如 POODLE。
注意如果您無法更新伺服器,請選擇這項功能不使用AppContext類別。若要這樣做,請使用下列其中一種方法:
-
以程式設計的方式︰ 必須是應用程式做,因為ServicePointManager就初始化一次的第一件事。應用程式中使用下列的程式碼範例︰
private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
AppContext.SetSwitch(DisableCachingName, true);
AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true); -
利用您的應用程式的 AppConfig 檔案︰ Appconfig 檔案中加入下面這一行︰
< AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/ >
如需有關已知問題,在.NET Framework 表 4.6] 的詳細資訊,請參閱已知.NET Framework 表 4.6] 的問題。
更多的資訊
如需有關在.NET Framework 表 4.6] 的影響與產品版本控制變更的詳細資訊,請參閱在.NET Framework 表 4.6] 的應用程式相容性。
注意事項
-
當應用程式鎖定為目標的.NET Framework 4.6 時,將只會套用新的組態。.NET Framework 4.5.2 和較早版本不會受到影響即使它們在.NET Framework 4.6 環境中執行。
-
受影響的最上層 Api 的清單︰
-
HttpClient HttpWebRequest
-
FtpClient
-
SmtpClient
-
SslStream
-
-
SCH_USE_STRONG_CRYPTO這個旗標會自動在.NET Framework 的 4.6 中使用,並藉由移除不安全的加密編譯和雜湊演算法會影響行為。所有的作業系統平台早於 Windows 10 RC4演算法將會從使用。將從 Windows 10,移除下列其他不安全的演算法︰ DES、 NULL、匯出及MD5