يتعذر الاتصال بخادم باستخدام واجهات برمجة تطبيقات ServicePointManager أو SslStream بعد الترقية إلى .NET Framework 4.6

ينطبق على
.NET Framework 4.6.2

الأعراض

لنفترض أنك قمت بالترقية إلى Microsoft .NET Framework 4.6 على جهاز الكمبيوتر الخاص بك. عند استخدام تطبيق يستخدم SSL 3.0 مع واجهات برمجة تطبيقات ServicePointManager أو SslStream للاتصال بخادم، يفشل الاتصال.

السبب

تحدث هذه المشكلة بسبب تغيير المجموعة الافتراضية لبروتوكولات 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.

  • قائمة بواجهات برمجة تطبيقات المستوى الأعلى المتأثرة:

    • HttpClient، HttpWebRequest
    • FtpClient
    • SmtpClient
    • SslStream
  • SCH_USE_STRONG_CRYPTO سيتم استخدام هذه العلامة تلقائيا في .NET Framework 4.6 وتؤثر على السلوك عن طريق إزالة خوارزميات التشفير والتجزئة غير الآمنة. بالنسبة لجميع أنظمة أنظمة التشغيل الأساسية التي تسبق Windows 10، ستتم إزالة خوارزمية RC4 من الاستخدام. من Windows 10، ستتم إزالة الخوارزميات الإضافية غير الآمنة التالية: DES وNULL وEXPORT وMD5