إخفاقات تأكيد الاتصال عبر بروتوكول أمان طبقة النقل (TLS)/طبقة المقابس الآمنة

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

تحدث تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة عندما يتعذّر على العميل والخادم إجراء اتصال باستخدام بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة. عند حدوث هذا الخطأ في Apigee Edge، يتلقّى تطبيق العميل حالة HTTP 503 مع الرسالة الخدمة غير متاحة. يظهر لك هذا الخطأ بعد أي طلب بيانات من واجهة برمجة التطبيقات يحدث فيه تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة.

رسائل الخطأ

HTTP/1.1 503 Service Unavailable

يمكنك أيضًا مشاهدة رسالة الخطأ هذه عند حدوث إخفاق تأكيد اتصال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة:

Received fatal alert: handshake_failure

الأسباب المحتملة

إنّ بروتوكول أمان طبقة النقل (TLS) (والمعروفة سابقًا بطبقة المقابس الآمنة (SSL)) هي تكنولوجيا الأمان القياسية لإنشاء رابط مشفَّر بين خادم ويب وبرنامج ويب، مثل متصفح أو تطبيق. وتأكيد الاتصال هي عملية تتيح لعميل وخادم بروتوكول أمان طبقة النقل (TLS)/طبقة المقابس الآمنة إنشاء مجموعة من المفاتيح السرية التي يمكنهم الاتصال بها. أثناء هذه العملية، يقوم العميل والخادم بما يلي:

  1. اتّفق على إصدار البروتوكول الذي تريد استخدامه.
  2. حدد خوارزمية التشفير المراد استخدامها.
  3. المصادقة على بعضها البعض من خلال تبادل الشهادات الرقمية والمصادقة عليها.

في حال نجاح تأكيد اتصال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة، سينقل كل من برنامج بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة البيانات إلى بعضهما البعض بشكل آمن. وبخلاف ذلك، في حال تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL)، يتم إنهاء الاتصال وتلقّى العميل خطأ 503 Service Unavailable.

الأسباب المحتملة لتعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) هي:

السبب الوصف مَن يمكنه تنفيذ خطوات تحديد المشاكل وحلّها
عدم تطابق البروتوكول البروتوكول الذي يستخدمه العميل غير متوافق مع الخادم. مستخدمو السحابة الإلكترونية العامة والخاصة
عدم تطابق حزمة الرموز لا يتيح الخادم استخدام مجموعة التشفير التي يستخدمها العميل. مستخدمو السحابة الإلكترونية العامة والخاصة
شهادة غير صحيحة لا يتطابق اسم المضيف في عنوان URL الذي يستخدمه العميل مع اسم المضيف في الشهادة المخزّنة في نهاية الخادم. مستخدمو السحابة الإلكترونية العامة والخاصة
يتم تخزين سلسلة شهادات غير مكتملة أو غير صالحة في نهاية العميل أو الخادم. مستخدمو السحابة الإلكترونية العامة والخاصة
يرسل العميل شهادة غير صحيحة أو منتهية الصلاحية إلى الخادم أو من الخادم إلى العميل. مستخدمو السحابة الإلكترونية العامة والخاصة
الخادم الذي تم فيه تفعيل إشارة اسم الخادم (SNI) خادم الخلفية هو مؤشر اسم الخادم (SNI) مفعَّل، ومع ذلك لا يمكن للعميل الاتصال بخوادم إشارة اسم الخادم (SNI). مستخدمو السحابة الإلكترونية الخاصة فقط

عدم تطابق البروتوكول

تحدث إخفاق تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة إذا كان البروتوكول الذي يستخدمه العميل غير متوافق مع الخادم إما في الاتصال الوارد (الشمالي) أو الاتصال الصادر (الصادر). راجِع أيضًا فهم الروابط الشمالية والجنوبية.

التشخيص

  1. حدِّد ما إذا كان الخطأ قد حدث في الاتصال northbound أو southbound. للحصول على مزيد من الإرشادات بشأن اتخاذ هذا القرار، راجِع تحديد مصدر المشكلة.
  2. شغِّل الأداة المساعدة tcpdump لجمع المزيد من المعلومات:
    • إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية، يمكنك جمع بيانات tcpdump في البرنامج أو الخادم ذي الصلة. ويمكن أن يكون العميل هو تطبيق العميل (للاتصالات الواردة أو الشمالية) أو معالج الرسائل (للاتصالات الصادرة أو باتجاه الجنوب). ويمكن أن يكون الخادم جهاز توجيه Edge (للاتصالات الواردة أو الشمالية) أو الخادم الخلفي (للاتصالات الصادرة أو الجنوبية) استنادًا إلى تحديدك من الخطوة 1.
    • إذا كنت من مستخدمي Public Cloud، يمكنك عندئذ جمع بيانات tcpdump فقط على تطبيق العميل (للاتصالات الواردة أو الشمالية) أو خادم الخلفية (للاتصالات الصادرة أو الجنوبية)، لأنّه ليس بإمكانك الوصول إلى جهاز Edge Router أو "معالج الرسائل".
    tcpdump -i any -s 0 host IP address -w File name
    
    يمكنك الاطّلاع على بيانات tcpdump للحصول على مزيد من المعلومات حول استخدام الأمر tcpdump.
  3. حلِّل بيانات tcpdump باستخدام أداة Wireshark أو أداة مشابهة.
  4. إليك نموذج تحليل من tcpdump باستخدام Wireshark:
    • في هذا المثال، حدثت مشكلة عدم تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة بين معالج الرسائل وخادم الخلفية (الاتصال الصادر أو الجنوب).
    • تعرض الرسالة رقم 4 في مخرجات tcpdump أدناه أن معالج الرسائل (المصدر) أرسل رسالة "Client Hello" إلى خادم الخلفية (الوجهة).

    • إذا نقرت على الرسالة Client Hello، يعني ذلك أنّ معالج الرسائل يستخدم بروتوكول TLSv1.2، كما هو موضّح أدناه:

    • توضح الرسالة رقم 5 أن خادم الخلفية يعلم رسالة "Client Hello" من معالج الرسائل.
    • يرسل خادم الخلفية على الفور تنبيهًا خطيرًا : إغلاق الإشعار إلى معالج الرسائل (الرسالة رقم 6). يعني ذلك تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة وسيتم إغلاق الاتصال.
    • يوضّح مزيد من التفاصيل عن الرسالة رقم 6 أنّ سبب تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة هو أنّ خادم الخلفية لا يتوافق إلا مع بروتوكول TLSv1.0 كما هو موضّح أدناه:

    • بسبب عدم التطابق بين البروتوكول المستخدَم من قِبل معالج الرسائل وخادم الخلفية، أرسل خادم الخلفية الرسالة التالية: رسالة تنبيه خطير: إغلاق الإشعار.

درجة الدقّة

يعمل معالج الرسائل على Java 8 ويستخدم بروتوكول TLSv1.2 افتراضيًا. إذا كان خادم الخلفية لا يتوافق مع بروتوكول TLSv1.2، يمكنك اتخاذ إحدى الخطوات التالية لحل هذه المشكلة:

  1. عليك ترقية خادم الخلفية بحيث يتوافق مع بروتوكول TLSv1.2. ننصح بهذا الحلّ لأنّ الإصدار 1.2 من بروتوكول أمان طبقة النقل (TLS) أكثر أمانًا.
  2. إذا كنت غير قادر على ترقية خادم الخلفية فورًا لسبب ما، يمكنك حينئذ إجبار "معالج الرسائل" على استخدام بروتوكول TLSv1.0 للاتصال بخادم الخلفية من خلال اتّباع الخطوات التالية:
    1. إذا لم تحدّد خادمًا مستهدفًا في تعريف TargetEndpoint للخادم الوكيل، يجب ضبط العنصر Protocol على TLSv1.0 كما هو موضّح أدناه:
      <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
         <SSLInfo>
             <Enabled>true</Enabled>
             <Protocols>
                 <Protocol>TLSv1.0</Protocol>
             </Protocols>
         </SSLInfo>
         <URL>https://myservice.com</URL>
       </HTTPTargetConnection>
       …
      </TargetEndpoint>
      
    2. في حال ضبط خادم مستهدف للخادم الوكيل، استخدِم واجهة برمجة التطبيقات هذه للإدارة لضبط البروتوكول على الإصدار 1.0 من بروتوكول أمان طبقة النقل (TLS) في إعدادات الخادم الهدف المحدَّد.

عدم تطابق الرمز

قد تلاحظ تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) إذا كانت خوارزمية مجموعة التشفير التي يستخدمها العميل غير متوافقة مع الخادم إما عند الاتصال الوارد (بحد الشمال) أو الاتصال الصادر (الصادر) في Apigee Edge. راجِع أيضًا فهم الروابط الشمالية والجنوبية.

التشخيص

  1. حدِّد ما إذا كان الخطأ قد حدث في الاتصال northbound أو southbound. للحصول على مزيد من الإرشادات حول اتخاذ هذا القرار، راجِع تحديد مصدر المشكلة.
  2. شغِّل الأداة المساعدة tcpdump لجمع المزيد من المعلومات:
    • إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية، يمكنك جمع بيانات tcpdump في البرنامج أو الخادم ذي الصلة. ويمكن أن يكون العميل هو تطبيق العميل (للاتصالات الواردة أو الشمالية) أو معالج الرسائل (للاتصالات الصادرة أو باتجاه الجنوب). ويمكن أن يكون الخادم جهاز توجيه Edge (للاتصالات الواردة أو الشمالية) أو الخادم الخلفي (للاتصالات الصادرة أو الجنوبية) استنادًا إلى تحديدك من الخطوة 1.
    • إذا كنت من مستخدمي Public Cloud، يمكنك عندئذ جمع بيانات tcpdump فقط على تطبيق العميل (للاتصالات الواردة أو الشمالية) أو خادم الخلفية (للاتصالات الصادرة أو الجنوبية)، لأنّه ليس بإمكانك الوصول إلى جهاز Edge Router أو "معالج الرسائل".
    tcpdump -i any -s 0 host IP address -w File name
    
    يُرجى الاطّلاع على بيانات tcpdump للحصول على مزيد من المعلومات حول استخدام الأمر tcpdump.
  3. حلّل بيانات tcpdump باستخدام أداة Wireshark أو أي أداة أخرى تعرفها.
  4. إليك نموذج تحليل لمخرجات tcpdump باستخدام Wireshark:
    • في هذا المثال، حدثت مشكلة عدم تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة بين تطبيق العميل وجهاز توجيه Edge (اتصال شمالي). تم جمع ناتج tcpdump على جهاز توجيه Edge.
    • توضّح الرسالة رقم 4 في مخرجات tcpdump أدناه أنّ تطبيق العميل (المصدر) أرسل رسالة "Client Hello" إلى جهاز Edge Router (الوجهة).

    • يؤدي اختيار رسالة Client Hello إلى توضيح أنّ تطبيق العميل يستخدم بروتوكول TLSv1.2.

    • توضّح الرسالة رقم 5 أنّ جهاز توجيه Edge يقر برسالة "Client Hello" من تطبيق العميل.
    • يرسل جهاز توجيه Edge على الفور تنبيهًا خطيرًا : تعذُّر تأكيد الاتصال إلى تطبيق العميل (الرسالة رقم 6). يعني هذا تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة وسيتم إغلاق الاتصال.
    • عند الاطّلاع على الرسالة رقم 6، يتم عرض المعلومات التالية:
      • يتوافق جهاز توجيه Edge مع بروتوكول TLSv1.2. وهذا يعني أنّ البروتوكول يتطابق بين تطبيق العميل وجهاز توجيه Edge.
      • ومع ذلك، لا يزال جهاز توجيه Edge يرسل FatalAlert: Failure إلى تطبيق العميل كما هو موضح في لقطة الشاشة أدناه:

    • قد يكون سبب الخطأ إحدى المشاكل التالية:
      • لا يستخدم تطبيق العميل خوارزميات مجموعة التشفير المتوافقة مع جهاز توجيه Edge.
      • يتيح جهاز توجيه Edge استخدام إشارة اسم الخادم (SNI)، إلا أنّ تطبيق العميل لا يرسل اسم الخادم.
    • تسرد الرسالة رقم 4 في مخرجات tcpdump خوارزميات مجموعة التشفير المتوافقة مع تطبيق العميل، كما هو موضّح أدناه:

    • يتم سرد قائمة بخوارزميات مجموعة التشفير المتوافقة مع جهاز توجيه Edge في ملف /opt/nginx/conf.d/0-default.conf. في هذا المثال، لا يتوافق جهاز توجيه Edge إلا مع خوارزميات مجموعة الرموز ذات التشفير العالي.
    • لا يستخدم تطبيق العميل أيًّا من خوارزميات مجموعة التشفير عالي التشفير. ويؤدي عدم التطابق هذا إلى تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL).
    • بما أنّ جهاز توجيه Edge يفعّل إشارة اسم الخادم (SNI)، انتقِل للأسفل إلى الرسالة رقم 4 في إخراج tcpdump وتأكَّد من أنّ تطبيق العميل يرسل اسم الخادم بشكل صحيح، كما هو موضّح في الشكل أدناه:


    • إذا كان هذا الاسم صالحًا، يمكنك استنتاج أنّ عملية تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) قد حدثت لأنّ خوارزميات مجموعة الرموز التي يستخدمها تطبيق العميل لا تتوافق مع جهاز توجيه Edge.

درجة الدقّة

يجب أن تتأكد من أن العميل يستخدم خوارزميات مجموعة التشفير المتوافقة مع الخادم. لحل المشكلة الموضّحة في قسم "التشخيص" السابق، نزِّل حزمة إضافة تشفير JavaScript (JCE) وثبِّتها وأدرِجها في تثبيت Java للتوافق مع خوارزميات مجموعة تشفير عالي التشفير.

الشهادة غير صحيحة

تحدث تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) إذا كانت لديك شهادات غير صحيحة في ملف تخزين المفاتيح/ملف تخزين المفاتيح الموثوق به، إما عند الاتصال الوارد (الشمال) أو الاتصال الصادر (الصادر) في Apigee Edge. راجِع أيضًا فهم الروابط الشمالية والجنوبية.

إذا كانت المشكلة في الوضع northbound، قد تظهر لك رسائل خطأ مختلفة بناءً على السبب الأساسي.

تسرد الأقسام التالية أمثلة على رسائل الخطأ وخطوات تشخيص هذه المشكلة وحلّها.

رسائل الخطأ

قد تظهر لك رسائل خطأ مختلفة بناءً على سبب تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة. إليك نموذج لرسالة الخطأ التي قد تظهر لك عند طلب خادم وكيل لواجهة برمجة التطبيقات:

* SSL certificate problem: Invalid certificate chain
* Closing connection 0
curl: (60) SSL certificate problem: Invalid certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html

الأسباب المحتملة

في ما يلي الأسباب النموذجية لهذه المشكلة:

السبب الوصف مَن يمكنه تنفيذ خطوات تحديد المشاكل وحلّها
عدم تطابق اسم المضيف لا يتطابق اسم المضيف المستخدَم في عنوان URL مع الشهادة في ملف تخزين المفاتيح في جهاز التوجيه. على سبيل المثال، يحدث عدم تطابق إذا كان اسم المضيف المستخدَم في عنوان URL هو myorg.domain.com بينما تتضمّن الشهادة اسم المضيف في الاسم الشائع (CN) كـ CN=something.domain.com.

مستخدمو Edge الخاص والعام على Cloud
سلسلة الشهادات غير مكتملة أو غير صحيحة سلسلة الشهادات غير كاملة أو غير صحيحة. مستخدمو Edge الخاص والعام فقط
شهادة منتهية الصلاحية أو غير معروفة أرسلها الخادم أو العميل يرسل الخادم أو العميل شهادة منتهية الصلاحية أو غير معروفة إما في الاتصال الشمالي أو في الاتصال الجنوبي. مستخدمو Edge Private Cloud وEdge Public Cloud

عدم تطابق اسم المضيف

التشخيص

  1. دوِّن اسم المضيف المستخدَم في عنوان URL الذي يعرضه طلب البيانات التالي من واجهة برمجة تطبيقات Edge Management:
    curl -v https://myorg.domain.com/v1/getinfo
    على سبيل المثال:
    curl -v https://api.enterprise.apigee.com/v1/getinfo
  2. احصل على المفتاح الشائع (CN) الذي يتم استخدامه في الشهادة المخزنة في ملف تخزين المفاتيح المحدد. ويمكنك استخدام واجهات برمجة التطبيقات التالية لإدارة Edge للحصول على تفاصيل الشهادة:
    1. الحصول على اسم الشهادة في ملف تخزين المفاتيح:

      إذا كنت مستخدمًا خاصًا في Cloud، يمكنك استخدام Management API على النحو التالي:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      إذا كنت مستخدمًا في Cloud Cloud، استخدِم Management API على النحو التالي:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. احصل على تفاصيل الشهادة في ملف تخزين المفاتيح باستخدام واجهة برمجة تطبيقات إدارة Edge.

      إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      إذا كنت من مستخدمي السحابة الإلكترونية العامة:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      

      نموذج شهادة:

      "certInfo": [
          {
            "basicConstraints": "CA:FALSE",
            "expiryDate": 1456258950000,
            "isValid": "No",
            "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US",
            "publicKey": "RSA Public Key, 2048 bits",
            "serialNumber": "07:bc:a7:39:03:f1:56",
            "sigAlgName": "SHA1withRSA",
            "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com",
            "validFrom": 1358287055000,
            "version": 3
          },
      

      يحتوي اسم الموضوع في الشهادة الأساسية على الاسم الشائع (CN) على النحو التالي: something.domain.com.

      بسبب عدم تطابق اسم المضيف المُستخدَم في عنوان URL لطلب واجهة برمجة التطبيقات (راجِع الخطوة رقم 1 أعلاه) واسم الموضوع في الشهادة، ستواجه مشكلة تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL).

درجة الدقّة

يمكن حل هذه المشكلة بإحدى الطريقتين التاليتين:

  • احصل على شهادة (إذا لم تكن لديك شهادة) يتضمّن الموضوع "CN" شهادة أحرف بدل، ثم حمِّل سلسلة الشهادات الكاملة الجديدة إلى ملف تخزين المفاتيح. مثلاً:
    "subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
  • يجب الحصول على شهادة (إذا لم يسبق لك الحصول على شهادة) يتضمّن الموضوع CN، ولكن استخدِم السمة your-org.your-domain كاسم بديل للموضوع، ثم حمِّل سلسلة الشهادات الكاملة إلى ملف تخزين المفاتيح.

المراجع

مخازن المفاتيح ومتاجر الثقة

سلسلة شهادات غير مكتملة أو غير صحيحة

التشخيص

  1. احصل على المفتاح الشائع (CN) الذي يتم استخدامه في الشهادة المخزنة في ملف تخزين المفاتيح المحدد. ويمكنك استخدام واجهات برمجة التطبيقات التالية لإدارة Edge للحصول على تفاصيل الشهادة:
    1. الحصول على اسم الشهادة في ملف تخزين المفاتيح:

      إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
      إذا كنت مستخدمًا سحابة إلكترونية عامة:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. الحصول على تفاصيل الشهادة في ملف تخزين المفاتيح:

      إذا كنت مستخدم Cloud خاصًا:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      إذا كنت من مستخدمي السحابة الإلكترونية العامة:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
    3. تحقَّق من صحة الشهادة وسلسلتها وتحقَّق من امتثالها للإرشادات الواردة في المقالة آلية عمل سلاسل الشهادات للتأكّد من أنّها سلسلة شهادات صالحة وكاملة. إذا كانت سلسلة الشهادات المخزّنة في ملف تخزين المفاتيح غير مكتملة أو غير صالحة، ستظهر لك عملية تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة.
    4. يوضّح الرسم البياني التالي نموذجًا لشهادة تتضمن سلسلة شهادات غير صالحة، حيث لا تتطابق الشهادات المتوسطة والجذرية:
    5. نموذج شهادة متوسطة وجذرية لا تتطابق فيها جهة الإصدار مع الموضوع


درجة الدقّة

  1. الحصول على شهادة (إذا لم تكن لديك شهادة) تتضمّن سلسلة شهادات كاملة وصالحة
  2. شغِّل الأمر opensl التالي للتحقُّق من صحة سلسلة الشهادات واكتمالها:
    openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
    .
  3. حمِّل سلسلة الشهادات التي تم التحقّق من صحتها إلى ملف تخزين المفاتيح.

شهادة منتهية الصلاحية أو غير معروفة أرسلها الخادم أو البرنامج

إذا أرسل الخادم/العميل شهادة غير صحيحة/منتهية الصلاحية إما في الاتصال الشمالي أو في الاتصال الجنوبي، سيرفض الطرف الآخر (الخادم/العميل) الشهادة التي تؤدي إلى إخفاق تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL).

التشخيص

  1. حدِّد ما إذا كان الخطأ قد حدث في الاتصال northbound أو southbound. للحصول على مزيد من الإرشادات بشأن اتخاذ هذا القرار، راجِع تحديد مصدر المشكلة.
  2. شغِّل الأداة المساعدة tcpdump لجمع المزيد من المعلومات:
    • إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية، يمكنك جمع بيانات tcpdump في البرنامج أو الخادم ذي الصلة. ويمكن أن يكون العميل هو تطبيق العميل (للاتصالات الواردة أو الشمالية) أو معالج الرسائل (للاتصالات الصادرة أو باتجاه الجنوب). ويمكن أن يكون الخادم جهاز توجيه Edge (للاتصالات الواردة أو الشمالية) أو الخادم الخلفي (للاتصالات الصادرة أو الجنوبية) استنادًا إلى تحديدك من الخطوة 1.
    • إذا كنت من مستخدمي Public Cloud، يمكنك عندئذ جمع بيانات tcpdump فقط على تطبيق العميل (للاتصالات الواردة أو الشمالية) أو خادم الخلفية (للاتصالات الصادرة أو الجنوبية)، لأنّه ليس بإمكانك الوصول إلى جهاز Edge Router أو "معالج الرسائل".
    tcpdump -i any -s 0 host IP address -w File name
    
    يُرجى الاطّلاع على بيانات tcpdump للحصول على مزيد من المعلومات حول استخدام الأمر tcpdump.
  3. حلِّل بيانات tcpdump باستخدام Wireshark أو أداة مشابهة.
  4. من إخراج tcpdump، حدِّد المضيف (العميل أو الخادم) الذي يرفض الشهادة أثناء خطوة التحقُّق.
  5. يمكنك استرداد الشهادة المُرسَلة من الطرف الآخر من إخراج tcpdump، بشرط أن تكون البيانات غير مشفّرة. سيكون ذلك مفيدًا لمقارنة ما إذا كانت هذه الشهادة مطابقة للشهادة المتوفرة في Truststore.
  6. راجِع نموذج tcpdump لاتصال طبقة المقابس الآمنة بين معالج الرسائل وخادم الخلفية.

    يعرِض النموذج tcpdump خطأ غير معروف للشهادة


    1. يرسل معالج الرسائل (العميل) "Client Hello" إلى خادم الخلفية (الخادم) في الرسالة رقم 59.
    2. يرسل خادم الخلفية "Server Hello" إلى معالج الرسائل في الرسالة رقم 61.
    3. ويتحققان بشكل تبادلي من صحة البروتوكول وخوارزميات مجموعة التشفير المستخدمة.
    4. يرسل خادم الخلفية رسالة الشهادة وخادم Hello Done إلى معالج الرسائل في الرسالة رقم 68.
    5. يرسل معالج الرسائل التنبيه الفادح "Description: Certificate Unknown" في الرسالة رقم 70.
    6. وبالنظر أكثر إلى الرسالة رقم 70، لا توجد تفاصيل إضافية بخلاف رسالة التنبيه كما هو موضّح أدناه:


    7. راجِع الرسالة رقم 68 للحصول على تفاصيل حول الشهادة التي أرسلها خادم الخلفية، كما هو موضّح في الرسم التالي:

    8. تتوفر كل من شهادة الخادم الخلفية وسلسلتها الكاملة ضمن قسم "الشهادات"، كما هو موضح في الشكل أعلاه.
  7. إذا تبيّن أنّ الشهادة غير معروفة إما من خلال جهاز التوجيه (الشمال) أو معالج الرسائل (من جهة الجنوب) كما هو موضّح في المثال الموضّح أعلاه، عليك اتّباع الخطوات التالية:
    1. احصل على الشهادة وسلسلتها المخزَّنة في Truststore المحدَّد. (راجع إعدادات المضيف الافتراضي لجهاز التوجيه ونقاط النهاية المستهدفة لمعالج الرسائل). يمكنك استخدام واجهات برمجة التطبيقات التالية للحصول على تفاصيل الشهادة:
      1. الحصول على اسم الشهادة في Truststore:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
      2. الحصول على تفاصيل الشهادة في Truststore:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
    2. تحقَّق مما إذا كانت الشهادة المخزّنة في ملف تخزين الثقة في جهاز التوجيه (شمال) أو شهادة معالجة الرسائل (الصادرة) تتطابق مع الشهادة المخزَّنة في ملف تخزين مفاتيح تطبيق العميل (الشمال) أو الخادم الهدف (الصادر) أو الشهادة التي تم الحصول عليها من مُخرجات tcpdump. وإذا كان هناك عدم تطابق، يكون ذلك هو سبب تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة.
  8. إذا تبيّن أنّ الشهادة غير معروفة إما من خلال تطبيق العميل (الشمال) أو الخادم الهدف (الصادر)، اتّبِع الخطوات التالية:
    1. احصل على سلسلة الشهادات الكاملة المستخدَمة في الشهادة المخزَّنة في ملف تخزين المفاتيح المحدّد. (راجع إعدادات المضيف الافتراضي لجهاز التوجيه ونقطة النهاية المستهدفة لمعالج الرسائل). يمكنك استخدام واجهات برمجة التطبيقات التالية للحصول على تفاصيل الشهادة:
      1. الحصول على اسم الشهادة في ملف تخزين المفاتيح:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      2. الحصول على تفاصيل الشهادة في ملف تخزين المفاتيح:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
        
    2. تحقَّق مما إذا كانت الشهادة المخزّنة في ملف تخزين مفاتيح جهاز التوجيه (الشمال) أو "معالج الرسائل" (الصادرة) تتطابق مع الشهادة المخزّنة في مخزن الثقة لتطبيق العميل (الصادر) أو الخادم الهدف (الصادر) أو الشهادة التي تم الحصول عليها من مُخرجات tcpdump. وإذا كان هناك عدم تطابق، يكون ذلك هو سبب تعذُّر تأكيد اتصال طبقة المقابس الآمنة (SSL).
  9. إذا تبيّن أنّ الشهادة التي أرسلها خادم/برنامج منتهية الصلاحية، سيرفض العميل/الخادم المستلِم الشهادة وستظهر لك رسالة التنبيه التالية في tcpdump:

    تنبيه (المستوى: خطير، الوصف: انتهت صلاحية الشهادة)

  10. تحقق من انتهاء صلاحية الشهادة في ملف تخزين المفاتيح لدى المضيف المناسب.

درجة الدقّة

لحل المشكلة المحددة في المثال أعلاه، حمِّل شهادة خادم الخلفية الصالحة إلى الثقة في معالج الرسائل.

يلخّص الجدول التالي الخطوات اللازمة لحلّ المشكلة استنادًا إلى سببها.

السبب الوصف الحلّ
شهادة منتهية الصلاحية NorthBound
  • انتهت صلاحية الشهادة المخزّنة في ملف تخزين المفاتيح في جهاز التوجيه.
  • انتهت صلاحية الشهادة المخزّنة في ملف تخزين المفاتيح لتطبيق العميل (طبقة المقابس الآمنة ثنائية الاتجاه).
حمِّل شهادة جديدة وسلسلتها الكاملة إلى ملف تخزين المفاتيح على المضيف المناسب.
SouthBound
  • انتهت صلاحية الشهادة المخزّنة في ملف تخزين المفاتيح في "الخادم الهدف".
  • انتهت صلاحية الشهادة المخزّنة في ملف تخزين المفاتيح في "معالج الرسائل" (طبقة المقابس الآمنة ثنائية الاتجاه).
حمِّل شهادة جديدة وسلسلتها الكاملة إلى ملف تخزين المفاتيح على المضيف المناسب.
شهادة غير معروفة NorthBound
  • لا تتطابق الشهادة المخزّنة في Truststore لتطبيق العميل مع شهادة جهاز التوجيه.
  • الشهادة المخزّنة في Truststore لجهاز التوجيه لا تتطابق مع شهادة تطبيق العميل (طبقة المقابس الآمنة ذات الاتجاهَين).
حمِّل الشهادة الصالحة إلى Truststore على المضيف المناسب.
SouthBound
  • الشهادة المخزنة في Truststore للخادم الهدف لا تتطابق مع شهادة معالج الرسائل.
  • الشهادة المخزنة في Truststore لمعالج الرسائل لا تتطابق مع شهادة الخادم الهدف (طبقة المقابس الآمنة ثنائية الاتجاه).
حمِّل الشهادة الصالحة إلى Truststore على المضيف المناسب.

خادم مزود بإشارة اسم الخادم (SNI)

يمكن أن يحدث تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) عندما يتصل العميل بخادم مفعَّل له إشارة اسم الخادم (SNI)، ولكن لم يتم تفعيل إشارة SNI للعميل. قد يحدث هذا إما عند الاتصال الشمالي أو الجنوبي في Edge.

أولاً، يجب تحديد اسم المضيف ورقم منفذ الخادم المستخدَم والتحقق مما إذا تم تفعيل إشارة SNI أم لا.

تحديد الخادم الذي يمكّن إشارة اسم الخادم (SNI)

  1. نفِّذ الأمر openssl وحاوِل الاتصال باسم مضيف الخادم ذي الصلة (جهاز توجيه Edge أو خادم الخلفية) بدون إدخال اسم الخادم، كما هو موضّح أدناه:
    openssl s_client -connect hostname:port
    
    قد تحصل على الشهادات وقد تلاحظ أحيانًا تعذُّر تأكيد الاتصال في الأمر opensl، كما هو موضّح أدناه:
    CONNECTED(00000003)
    9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
    
  2. نفِّذ الأمر openssl وحاوِل الاتصال باسم مضيف الخادم ذي الصلة (جهاز توجيه Edge أو خادم الخلفية) من خلال تمرير اسم الخادم كما هو موضّح أدناه:
    openssl s_client -connect hostname:port -servername hostname
    
  3. إذا تعذَّر تأكيد الاتصال في الخطوة رقم 1 أو حصلت على شهادات مختلفة في الخطوة رقم 1 والخطوة رقم 2، هذا يعني أنّ الخادم المحدَّد مفعّل إشارة اسم الخادم (SNI).

بعد التأكّد من أنّ الخادم مُفعّل إشارة اسم الخادم (SNI)، يمكنك اتّباع الخطوات التالية للتحقّق مما إذا كان تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) هو سبب عدم تمكّن العميل من الاتصال بخادم إشارة اسم الخادم (SNI).

التشخيص

  1. حدِّد ما إذا كان الخطأ قد حدث في الاتصال northbound أو southbound. للحصول على مزيد من الإرشادات بشأن اتخاذ هذا القرار، راجِع تحديد مصدر المشكلة.
  2. شغِّل الأداة المساعدة tcpdump لجمع المزيد من المعلومات:
    • إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية، يمكنك جمع بيانات tcpdump في البرنامج أو الخادم ذي الصلة. ويمكن أن يكون العميل هو تطبيق العميل (للاتصالات الواردة أو الشمالية) أو معالج الرسائل (للاتصالات الصادرة أو باتجاه الجنوب). ويمكن أن يكون الخادم جهاز توجيه Edge (للاتصالات الواردة أو الشمالية) أو الخادم الخلفي (للاتصالات الصادرة أو الجنوبية) استنادًا إلى تحديدك من الخطوة 1.
    • إذا كنت من مستخدمي Public Cloud، يمكنك عندئذ جمع بيانات tcpdump فقط على تطبيق العميل (للاتصالات الواردة أو الشمالية) أو خادم الخلفية (للاتصالات الصادرة أو الجنوبية)، لأنّه ليس بإمكانك الوصول إلى جهاز Edge Router أو "معالج الرسائل".
    tcpdump -i any -s 0 host IP address -w File name
    
    يُرجى الاطّلاع على بيانات tcpdump للحصول على مزيد من المعلومات حول استخدام الأمر tcpdump.
  3. حلِّل ناتج tcpdump باستخدام Wireshark أو أداة مشابهة.
  4. إليك نموذج تحليل لـ tcpdump باستخدام Wireshark:
    1. في هذا المثال، حدثت مشكلة عدم تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة بين معالج رسائل Edge وخادم الخلفية (اتصال خارجي).
    2. توضح الرسالة رقم 4 في مخرجات tcpdump أدناه أنّ "معالج الرسائل" (المصدر) أرسل رسالة "Client Hello" إلى خادم الخلفية (الوجهة).

    3. يؤدي اختيار رسالة "Client Hello" إلى ظهور أن "معالج الرسائل" يستخدم بروتوكول TLSv1.2.

    4. توضّح الرسالة رقم 4 أنّ خادم الخلفية يرصد رسالة "Client Hello" من "معالج الرسائل".
    5. يرسل خادم الخلفية على الفور تنبيهًا خطيرًا : تعذُّر تأكيد الاتصال إلى معالج الرسائل (الرسالة رقم 5). يعني هذا تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة وسيتم إغلاق الاتصال.
    6. راجِع الرسالة رقم 6 لاكتشاف المعلومات التالية
      • لا يتوافق خادم الخلفية مع بروتوكول TLSv1.2. وهذا يعني أنّ البروتوكول يتطابق بين معالج الرسائل وخادم الخلفية.
      • ومع ذلك، لا يزال الخادم الخلفية يرسل تنبيهًا خطيرًا: تعذُّر تأكيد الاتصال إلى معالج الرسائل كما هو موضَّح في الشكل أدناه:

    7. وقد يحدث هذا الخطأ لأحد الأسباب التالية:
      • لا يستخدم معالج الرسائل خوارزميات مجموعة التشفير المتاحة في خادم الخلفية.
      • تم تفعيل إشارة اسم الخادم (SNI) خادم الخلفية، إلا أنّ تطبيق العميل لا يرسل اسم الخادم.
    8. راجِع الرسالة رقم 3 (Client Hello) في مخرجات tcpdump بمزيد من التفصيل. وتجدُر الإشارة إلى أنّ الإضافة: server_name غير متوفّرة، كما هو موضّح أدناه:

    9. وهذا يؤكد أن "معالج الرسائل" لم يرسل server_name إلى خادم خلفية يتيح تفعيل SNI.
    10. ويتسبب هذا في تعذُّر تأكيد اتصال بروتوكول أمان طبقة النقل (TLS) أو طبقة المقابس الآمنة (SSL) وسبب إرسال خادم الخلفية تنبيهًا خطيرًا: تعذُّر تأكيد الاتصال إلى "معالج الرسائل".
  5. تحقَّق من ضبط jsse.enableSNIExtension property في system.properties على "خطأ" في معالج الرسائل لتأكيد أنّ معالج الرسائل غير مفعَّل للاتصال بالخادم الذي تم تفعيل إشارة اسم الخادم (SNI) عليه.

درجة الدقّة

يمكنك السماح لمعالجات الرسائل بالاتصال بالخوادم التي تم تفعيل إشارة اسم الخادم(SNI) عليها من خلال تنفيذ الخطوات التالية:

  1. أنشئ ملف/opt/apigee/customer/application/message-processor.properties (إذا لم يكن متوفّرًا بعد).
  2. أضف السطر التالي إلى هذا الملف: conf_system_jsse.enableSNIExtension=true
  3. تحويل مالك هذا الملف إلى apigee:apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. أعِد تشغيل معالج الرسائل.
    /opt/apigee/apigee-service/bin/apigee-service message-processor restart
  5. إذا كان لديك أكثر من معالج رسائل واحد، كرِّر الخطوات من 1 إلى 4 في جميع معالجات الرسائل.

إذا لم تتمكن من تحديد سبب تعذُّر تأكيد الاتصال من خلال بروتوكول أمان طبقة النقل أو طبقة المقابس الآمنة وحلّ المشكلة أو إذا كنت بحاجة إلى مزيد من المساعدة، يُرجى التواصل مع فريق دعم Apigee Edge. يمكنك مشاركة التفاصيل الكاملة حول المشكلة مع ناتج tcpdump.