Συμπτώματα
Ας υποθέσουμε ότι έχετε κάνει αναβάθμιση σε Microsoft .NET Framework 4.6 στον υπολογιστή σας. Όταν χρησιμοποιείτε μια εφαρμογή που χρησιμοποιεί SSL 3.0 μαζί με ServicePointManager ή SslStream APIs για να συνδεθείτε με ένα διακομιστή, η σύνδεση αποτυγχάνει.
Αιτία
Αυτό το ζήτημα παρουσιάζεται επειδή έχει αλλάξει το προεπιλεγμένο σύνολο πρωτοκόλλων 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 έχει αποδειχθεί ότι είναι ασφαλές και ευάλωτος σε επιθέσεις όπως ΝΤΟΥΛΆΠΑ.
Σημείωση Εάν δεν μπορείτε να ενημερώσετε το διακομιστή, χρησιμοποιήστε 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"/ >
Για περισσότερες πληροφορίες σχετικά με τα γνωστά ζητήματα της 4.6 του .NET Framework, ανατρέξτε στο θέμα Γνωστά ζητήματα για το 4.6 του .NET Framework.
Περισσότερες πληροφορίες
Για περισσότερες πληροφορίες σχετικά με τις αλλαγές της τήρησης ιστορικού εκδόσεων προϊόντος και αντίκτυπο σε το 4.6 του .NET Framework, ανατρέξτε στο θέμα Συμβατότητα εφαρμογών στα το 4.6 του .NET Framework.
Σημειώσεις
-
Η νέα ρύθμιση παραμέτρων ισχύουν μόνο όταν η εφαρμογή είναι στόχευση του 4.6 του .NET Framework. Το .NET Framework 4.5.2 και παλαιότερες εκδόσεις δεν θα επηρεαστούν ακόμη και αν εκτελούνται σε περιβάλλον .NET Framework 4.6.
-
Μια λίστα των API του ανώτατου επιπέδου που επηρεάζονται:
-
HttpClient, HttpWebRequest
-
FtpClient
-
SmtpClient
-
SslStream
-
-
SCH_USE_STRONG_CRYPTO Αυτή η σημαία θα χρησιμοποιηθεί αυτόματα το 4.6 του .NET Framework και επηρεάζει τη συμπεριφορά καταργώντας μη ασφαλείς αλγόριθμοι κρυπτογράφησης και κλειδώματος. Για όλες τις πλατφόρμες λειτουργικό σύστημα πριν από τα Windows 10, ο αλγόριθμος RC4 θα καταργηθούν από τη χρήση. Από 10 των Windows, θα καταργηθούν οι ακόλουθοι αλγόριθμοι μη ασφαλή πρόσθετα: DES, NULL, ΕΞΑΓΩΓΉ και MD5