مشاركة عبر


إزالة TLS 1.0 و1.1 من الاستخدام مع Azure Cache for Redis

لتلبية الدفع على مستوى الصناعة نحو الاستخدام الحصري للإصدار 1.2 من بروتوكول أمان طبقة النقل (TLS) أو أحدث، تتحرك ذاكرة التخزين المؤقت Azure ل Redis نحو المطالبة باستخدام TLS 1.2 في أبريل 2025. يُعرف الإصداران 1.0 و1.1 من TLS أنهما عرضة لهجمات مثل BEAST وPOODLE، وبهما ثغرات أمنية وتعرضات عامة أخرى (CVE).

لا يدعم إصدارا TLS 1.0 و1.1 أيضا أساليب التشفير الحديثة ومجموعات التشفير الموصى بها من قبل معايير التوافق مع صناعة بطاقات الدفع (PCI). تشرح مدونة أمان TLS هذه بعضاً من هذه الثغرات الأمنية بمزيد من التفصيل.

هام

اعتبارا من 1 أبريل 2025، سيتم فرض متطلبات TLS 1.2.

هام

لا ينطبق محتوى إيقاف TLS 1.0/1.1 في هذه المقالة على ذاكرة التخزين المؤقت Azure ل Redis Enterprise/Enterprise Flash لأن مستويات المؤسسة تدعم TLS 1.2 أو أحدث فقط.

كجزء من هذا الجهد، يمكنك توقع التغييرات التالية على Azure Cache for Redis:

  • المرحلة 1: توقف ذاكرة التخزين المؤقت Azure ل Redis عن تقديم TLS 1.0/1.1 كخيار لإعداد MinimumTLSVersion لإنشاء ذاكرة التخزين المؤقت الجديدة. لن يتم تحديث مثيلات ذاكرة التخزين المؤقت الحالية في هذه المرحلة. لا يمكنك تعيين MinimumTLSVersion إلى 1.0 أو 1.1 لذاكرة التخزين المؤقت الموجودة.
  • المرحلة 2: تتوقف ذاكرة التخزين المؤقت Azure ل Redis عن دعم TLS 1.1 وTLS 1.0 بدءا من 1 أبريل 2025. بعد هذا التغيير، يجب أن يستخدم التطبيق الخاص بك TLS 1.2 أو أحدث للتواصل مع ذاكرة التخزين المؤقت الخاصة بك. تظل خدمة Azure Cache for Redis متوفرة أثناء تحديث MinimumTLSVersion لجميع ذاكرات التخزين المؤقت إلى 1.2.
التاريخ‬ ‏‏الوصف
سبتمبر 2023 إعلان إيقاف TLS 1.0/1.1
1 مارس 2024 بدءا من 1 مارس 2024، لا يمكنك إنشاء ذاكرة تخزين مؤقت جديدة مع تعيين الحد الأدنى لإصدار TLS إلى 1.0 أو 1.1 ولا يمكنك تعيين MinimumTLSVersion إلى 1.0 أو 1.1 لذاكرة التخزين المؤقت الموجودة. لا يتم تحديث الحد الأدنى من إصدارات TLS تلقائيا لذاكرة التخزين المؤقت الموجودة في هذه المرحلة.
31 مارس 2025 تأكد من أن جميع تطبيقاتك تتصل بذاكرة التخزين المؤقت Azure ل Redis باستخدام TLS 1.2 وتعيين الحد الأدنى لإصدار TLS على إعدادات ذاكرة التخزين المؤقت إلى 1.2.
بدءا من 1 أبريل 2025 يتم تحديث الحد الأدنى من إصدار TLS لجميع مثيلات ذاكرة التخزين المؤقت إلى 1.2. وهذا يعني أن Azure Cache لمثيلات Redis ترفض الاتصالات باستخدام TLS 1.0 أو 1.1 في هذه المرحلة.

كجزء من هذا التغيير، يزيل Azure Cache for Redis الدعم لمجموعة التشفير القديمة غير الآمنة. تقتصر مجموعات التشفير المدعومة على المجموعات التالية عند تكوين ذاكرة التخزين المؤقت بحد أدنى من TLS 1.2:

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256

توفر الأقسام التالية إرشادات حول كيفية الكشف عن التبعيات على إصدارات TLS السابقة هذه وإزالتها من التطبيق الخاص بك.

تحقق من إصدارات TLS المدعومة من Azure Cache for Redis

يمكنك التحقق من تعيين الحد الأدنى لقيمة إصدار TLS إلى TLS 1.2 في الإعدادات المتقدمة لذاكرة التخزين المؤقت في مدخل Microsoft Azure. إذا كانت أي قيمة أخرى غير TLS 1.2، فتأكد من اتباع الإرشادات الواردة في القسم تكوين ذاكرة التخزين المؤقت Azure ل Redis لاستخدام TLS 1.2. إذا كانت القيمة TLS 1.2، وكان تطبيق العميل الخاص بك قادرا على الاتصال دون أي أخطاء، فلن تكون هناك حاجة إلى أي إجراء.

يمكنك أيضا استخدام هذا البرنامج النصي PowerShell للتحقق من الحد الأدنى من إصدار TLS المدعوم من قبل Azure Cache لنقطة نهاية Redis. إذا كان مثيل Redis الخاص بك هو الشبكة الظاهرية (VNet) التي تم إدخالها، يجب تشغيل هذا البرنامج النصي من جهاز ظاهري في VNet الخاص بك لديه حق الوصول إلى نقطة نهاية Azure Cache for Redis. إذا كانت النتيجة تظهر Tls Enabled و/أو Tls 11 Enabled، فتأكد من اتباع الإرشادات الواردة في القسم تكوين ذاكرة التخزين المؤقت Azure ل Redis لاستخدام TLS 1.2. إذا كانت النتيجة تظهر فقط Tls12 Enabled وكان تطبيق العميل الخاص بك قادرا على الاتصال دون أي أخطاء، فلا يلزم اتخاذ أي إجراء.

    param(
    [Parameter(Mandatory=$true)]
    [string]$redisCacheName,
    [Parameter(Mandatory=$false)]
    [string]$dnsSuffix = ".redis.cache.windows.net",
    [Parameter(Mandatory=$false)]
    [int]$connectionPort = 6380,
    [Parameter(Mandatory=$false)]
    [int]$timeoutMS = 2000
    )
    $redisEndpoint = "$redisCacheName$dnsSuffix"
    $protocols = @(
        [System.Security.Authentication.SslProtocols]::Tls,
        [System.Security.Authentication.SslProtocols]::Tls11,
        [System.Security.Authentication.SslProtocols]::Tls12
    )
    $protocols | % {
        $ver = $_
        $tcpClientSocket = New-Object Net.Sockets.TcpClient($redisEndpoint, $connectionPort )
        if(!$tcpClientSocket)
        {
            Write-Error "$ver- Error Opening Connection: $port on $computername Unreachable"
            exit 1;
        }
        else
        {
            $tcpstream = $tcpClientSocket.GetStream()
            $sslStream = New-Object System.Net.Security.SslStream($tcpstream,$false)
            $sslStream.ReadTimeout = $timeoutMS
            $sslStream.WriteTimeout = $timeoutMS
            try
            {
                $sslStream.AuthenticateAsClient($redisEndpoint, $null, $ver, $false)
                Write-Host "$ver Enabled"
            }
            catch [System.IO.IOException]
            {
                $null = $_
                #Write-Host "$ver Disabled"
            }
            catch
            {
                $null = $_
                #Write-Error "Unexpected exception $_"
            }
        }
    }

تكوين ذاكرة التخزين المؤقت Azure ل Redis لاستخدام TLS 1.2

يمكنك تكوين TLS 1.2 على ذاكرة التخزين المؤقت عن طريق تعيين قيمة الحد الأدنى لإصدار TLS إلى TLS 1.2 في الإعدادات المتقدمة لذاكرة التخزين المؤقت في مدخل Microsoft Azure.

  1. لتكوين ذاكرة التخزين المؤقت لاستخدام TLS 1.2، حدد أولا إعدادات متقدمة من قائمة الموارد لذاكرة التخزين المؤقت.

  2. حدد 1.2 في الحد الأدنى لإصدار TLS في جزء العمل. ثم حدد حفظ.

يمكنك أيضا القيام بنفس الشيء باستخدام PowerShell. تحتاج إلى الوحدة النمطية Az.RedisCache مثبتة بالفعل قبل تشغيل الأمر.

   Set-AzRedisCache -Name <YourRedisCacheName> -MinimumTlsVersion "1.2"

لتعيين إصدار TLS من خلال CLI، --minimum-tls-version يتوفر فقط في وقت إنشاء Redis ولا يتم دعم التغيير minimum-tls-version على مثيل Redis موجود.

إشعار

يجب أن تكون خدمة Azure Cache for Redis متوفرة أثناء الترحيل إلى TLS 1.2 أو أحدث.

تحقق مما إذا كان تطبيق العميل الخاص بك متوافقا بالفعل

يمكنك معرفة ما إذا كان تطبيقك يعمل مع TLS 1.2 عن طريق تعيين الحد الأدنى لقيمة إصدار TLS إلى TLS 1.2 كما هو موضح سابقا، على ذاكرة التخزين المؤقت للاختبار أو التقسيم المرحلي ثم تشغيل الاختبارات. إذا استمر التطبيق في العمل كما هو متوقع بعد هذا التغيير، فمن المحتمل أنه متوافق. من المحتمل أنك قد تحتاج إلى تكوين مكتبة عميل Redis المستخدمة من قبل التطبيق الخاص بك لتمكين TLS 1.2 على وجه التحديد للاتصال بذاكرة التخزين المؤقت Azure ل Redis.

تكوين تطبيق العميل الخاص بك لاستخدام TLS 1.2

تستخدم معظم التطبيقات مكتبات عملاء Redis للتعامل مع الاتصالات مع ذاكرات التخزين المؤقت الخاصة بهم. فيما يلي إرشادات لتكوين بعض مكتبات العملاء الشائعة، بلغات وأطر برمجة مختلفة، لاستخدام TLS 1.2.

.NET

يستخدم عملاء Redis .NET الإصدار الأقدم من TLS افتراضياً على .NET Framework 4.5.2 أو إصدار أقدم، ويستخدمون أحدث إصدار من TLS على .NET Framework 4.6 أو أحدث. إذا كنت تستخدم إصداراً أقدم من .NET Framework، فقم بتمكين TLS 1.2 يدوياً:

  • StackExchange.Redis: تعيين ssl=true وsslProtocols=tls12 في سلسلة الاتصال.
  • ServiceStack.Redis: اتبع إرشادات ServiceStack.Redis وتطلب ServiceStack.Redis v5.6 كحد أدنى.

.NET الأساسية

يعود عملاء Redis .NET Core افتراضياً إلى إصدار TLS الافتراضي لنظام التشغيل، والذي يعتمد على نظام التشغيل نفسه.

اعتمادا على إصدار نظام التشغيل وأي تصحيحات تم تطبيقها، يمكن أن يختلف إصدار TLS الافتراضي الفعال. لمزيد من المعلومات، راجع أفضل ممارسات أمان طبقة النقل (TLS) باستخدام .NET Framework.

ومع ذلك، إذا كنت تستخدم نظام تشغيل قديماً أو تريد التأكد فقط، فنحن نوصي بتكوين إصدار TLS المفضل يدوياً من خلال العميل.

Java

يستخدم عملاء Redis Java TLS 1.0 في الإصدار 6 من Java أو إصدار أقدم. لا يمكن لـ Jedis وLettuce وRedisson الاتصال بـ Azure Cache for Redis إذا تم تعطيل TLS 1.0 في ذاكرة التخزين المؤقت. قم بترقية إطار عمل Java الخاص بك لاستخدام إصدارات TLS الجديدة.

بالنسبة إلى Java 7، لا يستخدم عملاء Redis TLS 1.2 افتراضياً ولكن يمكن تهيئته له. على سبيل المثال، يسمح لك Jedis بتحديد إعدادات TLS الأساسية باستخدام القصاصة البرمجية التالية:

SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLParameters sslParameters = new SSLParameters();
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
sslParameters.setProtocols(new String[]{"TLSv1.2"});
 
URI uri = URI.create("rediss://host:port");
JedisShardInfo shardInfo = new JedisShardInfo(uri, sslSocketFactory, sslParameters, null);
 
shardInfo.setPassword("cachePassword");
 
Jedis jedis = new Jedis(shardInfo);

لا يدعم عملاء Lettuce وRedisson حتى الآن تحديد إصدار TLS. يتم قطعها إذا كانت ذاكرة التخزين المؤقت تقبل اتصالات TLS 1.2 فقط. تتم مراجعة الإصلاحات الخاصة بهؤلاء العملاء، لذا تحقق من هذه الحزم للحصول على إصدار محدث مع هذا الدعم.

في Java 8، يتم استخدام TLS 1.2 افتراضياً ويجب ألا يتطلب تحديثات لتكوين العميل في معظم الحالات. لتكون آمناً، اختبر طلبك.

اعتبارا من Java 17، يتم استخدام TLS 1.3 بشكل افتراضي.

Node.js

تدعم كل من Node Redis وioredis TLS 1.2 و1.3.

PHP

الإصدارات الأقدم من PHP 7: يدعم Predis TLS 1.0 فقط. هذه الإصدارات لا تعمل مع TLS 1.2؛ يجب عليك الترقية لاستخدام TLS 1.2.

PHP 7.0 إلى PHP 7.2.1: يستخدم Predis TLS 1.0 أو 1.1 افتراضياً فقط. يمكنك استخدام الحل البديل التالي لاستخدام TLS 1.2. حدد TLS 1.2 عند إنشاء مثيل العميل:

$redis=newPredis\Client([
    'scheme'=>'tls',
    'host'=>'host',
    'port'=>6380,
    'password'=>'password',
    'ssl'=>[
        'crypto_type'=>STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
    ],
]);

PHP 7.3 والإصدارات الأحدث: يستخدم Predis أحدث إصدار من TLS.

PhpRedis

لا يدعم PhpRedis TLS على أي إصدار PHP.

Python

يستخدم Redis-py بروتوكول TLS 1.2 افتراضياً.

GO

يستخدم Redigo TLS 1.2 افتراضياً.