503 الخدمة غير متاحة - تعذّر تأكيد الاتصال بطبقة المقابس الآمنة (SSL)

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

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP برقم 503 Service Unavailable مع رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رسالة الخطأ

يتلقى تطبيق العميل رمز الاستجابة التالي:

HTTP/1.1 503 Service Unavailable

بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:

{
   "fault":{
      "faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
      }
   }
}

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

قد يظهر لك رمز الحالة 503 Service Unavailable مع رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed نتيجة حدوث خطأ أثناء عملية تأكيد اتصال طبقة المقابس الآمنة (SSL) بين معالج الرسائل في Apigee Edge وخادم الخلفية لعدة أسباب. تشير رسالة الخطأ في faultstring عادةً إلى سبب محتمل عالٍ أدّى إلى حدوث هذا الخطأ.

استنادًا إلى رسالة الخطأ التي تظهر في faultstring، عليك استخدام الأساليب المناسبة لتحديد المشكلة وحلّها. يوضّح هذا الدليل الإرشادي كيفية تحديد المشاكل وحلّها في هذا الخطأ عند ظهور رسالة الخطأ SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target في faultstring.

يحدث هذا الخطأ أثناء عملية تأكيد اتصال طبقة المقابس الآمنة (SSL) بين معالج الرسائل في Apigee Edge وخادم الخلفية:

  • إذا كان متجر truststore لمعالجة الرسائل في Apigee Edge:
    • تحتوي على سلسلة شهادات لا تتطابق مع سلسلة الشهادات الكاملة للخادم الخلفية، أو
    • لا يحتوي على سلسلة الشهادات الكاملة لخادم الخلفية
  • إذا كانت سلسلة الشهادات التي قدمها خادم الخلفية:
    • يحتوي على اسم النطاق المؤهل بالكامل (FQDN) الذي لا يتطابق مع اسم المضيف المحدد في نقطة النهاية المستهدفة
    • تحتوي على سلسلة شهادات غير صحيحة أو غير مكتملة

في ما يلي الأسباب المحتمَلة لهذه المشكلة:

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
شهادة غير صحيحة/غير مكتملة أو سلسلة شهادات في مساحة تخزين الثقة لمعالج الرسائل الشهادة و/أو سلسلتها المخزنة في Truststore لمعالج الرسائل في Apigee Edge لا تتطابق مع سلسلة شهادات الخادم الخلفية أو لا تحتوي على سلسلة الشهادات الكاملة لخادم الخلفية. مستخدمو Edge الخاص والعام على Cloud
عدم تطابق اسم النطاق المؤهل بالكامل في شهادة الخادم الخلفي واسم المضيف في نقطة النهاية الهدف تحتوي الشهادة المقدمة من خادم الخلفية على FQDN (اسم مجال مؤهل بالكامل) لا يطابق اسم المضيف المحدد في نقطة النهاية الهدف. مستخدمو Edge الخاص والعام على Cloud
شهادة غير صحيحة/غير مكتملة أو سلسلة شهادات مقدّمة من خادم الخلفية سلسلة الشهادات التي يقدّمها خادم الخلفية إما غير صحيحة أو غير مكتملة. مستخدمو Edge الخاص والعام على Cloud

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. ارسم رمز الخطأ مقابل الوقت.

  6. اختَر خلية تحتوي على رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  7. يتم عرض المعلومات المتعلقة برمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  8. انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.

    ( عرض صورة أكبر حجمًا)

  9. من نافذة السجلّات، دوِّن التفاصيل التالية:
    • طلب معرّف الرسالة
    • رمز الحالة: 503
    • مصدر الخطأ: target
    • رمز الخطأ: messaging.adaptors.http.flow.SslHandshakeFailed

التتبّع

الإجراء الثاني: استخدام أداة التتبُّع

لتشخيص الخطأ باستخدام أداة التتبُّع:

  1. فعِّل جلسة التتبُّع وإمّا
    • انتظِر حتى يظهر الخطأ 503 Service Unavailable الذي يتضمّن رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed.
    • إذا كان بإمكانك إعادة إظهار المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة. 503 Service Unavailable
  2. تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):

  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
  4. تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
  5. سيظهر لك الخطأ عادةً بعد مرحلة بدء تدفق الطلب المستهدَف كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  6. دوِّن قيم ما يلي من سجلّ التتبّع:
    • خطأ: SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.cause: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.class: com.apigee.errors.http.server.ServiceUnavailableException
    • تشير قيمة الخطأ SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target إلى تعذُّر تأكيد اتصال طبقة المقابس الآمنة (SSL)، لأنّ معالج الرسائل في Apigee Edge لم يتمكن من التحقّق من شهادة الخادم الخلفية.
  7. انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
  8. انتقِل إلى قسم عناوين خطأ المرحلة وحدد قيم X-Apigee- error-code وX-Apigee-error-source وX-Apigee-Message-ID كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  9. لاحِظ قيم X-Apigee-fault-code وX-Apigee-fault-code وX-Apigee-fault-code:
  10. عناوين الأخطاء القيمة
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

الإجراء 3: استخدام سجلات الوصول إلى NGINX

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول HTTP 503 Service Unavailable.
  2. تحقَّق من سجلات وصول NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. ابحث عن أي أخطاء 503 تتضمّن رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو لمعرفة ما إذا كانت هناك أي طلبات لا تزال يتعذّر تنفيذها مع 503.
  4. إذا عثرت على أي أخطاء 503 تتضمّن الرمز X-Apigee-fault-code الذي يتطابق مع قيمةX-Apigee-fault-code، حدِّد قيمة X-Apigee-fault-code

    نموذج لخطأ 503 من سجلّ الوصول إلى NGINX:

    ( عرض صورة أكبر حجمًا)

    يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X-Apigee-fault-code وX-Apigee-fault-code .

    العناوين القيمة
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

سجلّات "معالج الرسائل"

الإجراء رقم 4: استخدام سجلات معالج الرسائل

  1. حدِّد معرِّف الرسالة لأحد الطلبات التي تعذّر تنفيذها باستخدام "مراقبة واجهة برمجة التطبيقات" أو "أداة التتبُّع" أو سجلات الوصول في NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. ابحث عن معرِّف رسالة الطلب المحدد في سجلّ معالج الرسائل (/opt/apigee/var/log/edge-message-processor/logs/system.log). قد تلاحظ الخطأ التالي:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() :
    SSLClientChannel[Connected: Remote:X.X.X.X:443
    Local:192.168.194.140:55102]@64596 useCount=1
    bytesRead=0 bytesWritten=0 age=233ms  lastIO=233ms
    isOpen=true handshake failed, message: General SSLEngine problem
    

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

    سيتبع ذلك استثناءً لتتبُّع تسلسل استدعاء الدوال البرمجية بالتفصيل كما هو موضَّح أدناه:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() :
    RequestWriteListener.onException(HTTPRequest@1522922c)
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    	... <snipped>
    Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:203)
    	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
    	... <snipped>
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
    certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    	... <snipped>
      

    تجدر الإشارة إلى أن تعذُّر تأكيد الاتصال يرجع إلى:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    يشير هذا إلى تعذُّر تأكيد اتصال طبقة المقابس الآمنة (SSL) لأنّ معالج الرسائل في Apigee Edge لم يتمكن من التحقّق من شهادة الخادم الخلفية.

السبب: شهادة غير صحيحة/غير مكتملة أو سلسلة شهادات في Truststore لمعالج الرسائل

التشخيص

  1. حدِّد رمز الخطأ أو مصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كان رمز الخطأ هو messaging.adaptors.http.flow.SslHandshakeFailed، يمكنك تحديد رسالة الخطأ باستخدام إحدى الطريقتَين التاليتَين:
  3. إذا كانت رسالة الخطأ sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"، فهي تشير إلى تعذُّر تأكيد اتصال طبقة المقابس الآمنة (SSL)، لأنّ معالج الرسائل في Apigee Edge لم يتمكن من التحقّق من صحة شهادة خادم الخلفية.

يمكنك تصحيح أخطاء هذه المشكلة على مرحلتَين:

  1. المرحلة 1: تحديد سلسلة شهادات الخادم الخلفي
  2. المرحلة 2: مقارنة سلسلة الشهادات المخزّنة في Truststore لمعالج الرسائل

المرحلة 1

المرحلة 1: تحديد سلسلة شهادات الخادم الخلفي

يمكنك استخدام إحدى الطرق التالية لتحديد سلسلة شهادات الخادم الخلفي:

openssl

نفِّذ الأمر openssl على اسم مضيف خادم الخلفية على النحو التالي:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

لاحظ سلسلة الشهادات من مخرجات الأمر أعلاه:

نموذج لسلسلة شهادات خادم الخلفية من ناتج أمر opensl:

Certificate chain
 0 s:/CN=mocktarget.apigee.net
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

tcpdump

  1. إذا كنت من مستخدمي Cloud Cloud، ننصحك بالتقاط حزم TCP/IP على خادم الخلفية.
  2. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك عندئذٍ التقاط حزم TCP/IP على الخادم الخلفية أو معالج الرسائل. ويُفضَّل أن تلتقطها على خادم الخلفية لأنه يتم فك تشفير الحِزم على الخادم الخلفي.
  3. استخدِم الأمر tcpdump التالي لالتقاط حزم TCP/IP:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. حلِّل حزم TCP/IP باستخدام أداة Wireshark أو أداة مشابهة تعرفها.

    نموذج تحليل Tcpdump

    ( عرض صورة أكبر حجمًا)

    • الحزمة رقم 43: أرسل معالج الرسائل (المصدر) رسالة Client Hello إلى خادم الخلفية (الوجهة).
    • الحزمة رقم 44: يُقر خادم الخلفية باستلام رسالة Client Hello من "معالج الرسائل".
    • الحزمة رقم 45: يرسل خادم الخلفية رسالة Server Hello مع شهادتها.
    • الحزمة رقم 46: يُقر "معالج الرسائل" باستلام رسالة Server Hello والشهادة.
    • الحزمة رقم 47: يُرسِل "معالج الرسائل" رسالة FIN, ACK متبوعة بـ RST, ACK في الحزمة رقم 48.

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

    • يمكنك الرجوع ومراجعة الحزمة رقم 45 وتحديد سلسلة الشهادات التي أرسلها خادم الخلفية.

      ( عرض صورة أكبر حجمًا)

    • في هذا المثال، يتضح لك أنّ الخادم قد أرسل شهادة اختبارية باستخدام common name (CN) = mocktarget.apigee.net، متبوعة بشهادة وسيطة تتضمّن CN= GTS CA 1D4 وشهادة جذر مع CN = GTX Root R1.

    إذا تأكدت من إخفاق عملية التحقق من صحة شهادة الخادم، فانتقل إلى المرحلة 2: مقارنة شهادة الخادم الخلفية والشهادات المخزنة في Truststore لمعالج الرسائل.

المرحلة 2

المرحلة الثانية: مقارنة شهادة خادم الخلفية والشهادات المخزّنة في Truststores لمعالج الرسائل

  1. تحديد سلسلة شهادات الخادم الخلفية.
  2. حدِّد الشهادة المخزنة في مخزن الثقة الخاص بـ "معالج الرسائل" باتّباع الخطوات التالية:
    1. احصل على الاسم المرجعي لمتجر Truststore من العنصر TrustStore في القسم SSLInfo ضمن TargetEndpoint.

      لنلقِ نظرة على نموذج قسم SSLInfo في إعداد TargetEndpoint:

      <TargetEndpoint name="default">
      ...
         <HTTPTargetConnection>
            <Properties />
            <SSLInfo>
               <Enabled>true</Enabled>
               <ClientAuthEnabled>true</ClientAuthEnabled>
               <KeyStore>ref://myKeystoreRef</KeyStore>
               <KeyAlias>myKey</KeyAlias>
               <TrustStore>
                  ref://myCompanyTrustStoreRef
               </TrustStore>
            </SSLInfo>
         </HTTPTargetConnection>
         ...
      </TargetEndpoint>
      
    2. في المثال أعلاه، اسم المرجع TrustStore هو myCompanyTruststoreRef.
    3. في واجهة مستخدم Edge، حدد البيئات > المراجع. دوِّن الاسم الوارد في عمود المرجع لمرجع Truststore المحدد. سيكون هذا هو اسم متجرك الموثوق به.

      ( عرض صورة أكبر حجمًا)

    4. في المثال أعلاه، اسم Truststore هو:

      myCompanyTruststoreRef: myCompanyTruststore

  3. يمكنك الحصول على الشهادات المخزَّنة في Truststore (تم تحديد هذه الشهادات في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:

    1. احصل على جميع الشهادات لملف تخزين مفاتيح تشفير أو ملف تخزين موثوق به. تعرض واجهة برمجة التطبيقات هذه جميع الشهادات في Truststore المحدَّد.

      مستخدم السحابة الإلكترونية العامة:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      مستخدم Cloud خاص:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      المكان:

      • ORGANIZATION_NAME هو اسم المؤسسة
      • ENVIRONMENT_NAME هو اسم البيئة.
      • KEYSTORE_NAME هو اسم ملف تخزين المفاتيح
      • تم ضبط $TOKEN على رمز دخول OAuth 2.0 كما هو موضح في الحصول على رمز دخول OAuth 2.0.
      • تم توضيح خيارات curl المستخدمة في هذا المثال في استخدام curl

      نموذج المخرجات:

      الشهادات من مثال Truststore myCompanyTruststore هي:

      [
        "serverCert"
      ]
      

    2. الحصول على تفاصيل الشهادة للشهادة المحدَّدة من أحد ملفات تخزين المفاتيح أو Truststore تعرض واجهة برمجة التطبيقات هذه معلومات عن شهادة معيّنة في Truststore المحدَّد.

      مستخدم السحابة الإلكترونية العامة:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      مستخدم Cloud خاص

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      المكان:

      • ORGANIZATION_NAME هو اسم المؤسسة
      • ENVIRONMENT_NAME هو اسم البيئة.
      • KEYSTORE_NAME هو اسم ملف تخزين المفاتيح
      • CERT_NAME هو اسم الشهادة
      • تم ضبط $TOKEN على رمز دخول OAuth 2.0 كما هو موضح في الحصول على رمز دخول OAuth 2.0.
      • تم توضيح خيارات curl المستخدمة في هذا المثال في استخدام curl

      المخرجات النموذجية

      تعرض تفاصيل serverCert الموضوع وجهة إصدار البطاقة على النحو التالي:

      شهادة الورقة/الكيان:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      الشهادة المتوسطة:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      
  4. تأكَّد من مطابقة شهادة الخادم الفعلية التي تم الحصول عليها في الخطوة 1 والشهادة المخزّنة في Truststore التي تم الحصول عليها في الخطوة 3. في حال عدم التطابق، هذا هو سبب المشكلة.

    من المثال المعروض أعلاه، دعنا نلقِ نظرة على شهادة واحدة في كل مرة:

    1. الشهادة التفصيلية:

      من خادم الخلفية:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      

      من مخزن الثقة التابع لمعالج الرسائل (العميل):

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      تتطابق شهادة الطرفية المخزّنة في Truststore مع شهادة خادم الخلفية.

    2. الشهادة المتوسطة:

      من خادم الخلفية:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      من مخزن الثقة التابع لمعالج الرسائل (العميل):

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
      

      تتطابق الشهادة المتوسطة المخزّنة في Truststore مع شهادة الخادم الخلفية.

    3. شهادة الجذر:

      من خادم الخلفية:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      شهادة الجذر مفقودة تمامًا في Truststore لمعالج الرسائل.

    4. بسبب عدم توفُّر شهادة الجذر في Truststore، يطرح "معالج الرسائل" الاستثناء التالي:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      

      وتعرض 503 Service Unavailable مع رمز الخطأ messaging.adaptors.http.flow.SslHandshakeFailed لتطبيقات العميل

درجة الدقّة

  1. تأكَّد من أن لديك سلسلة الشهادات الصحيحة والكاملة لخادم الخلفية.
  2. إذا كنت مستخدمًا على Cloud Cloud، اتّبِع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) للسحابة الإلكترونية لتعديل الشهادة إلى متجر موثوق به لمعالج الرسائل من Apigee Edge.
  3. إذا كنت مستخدمًا خاصًا في السحابة الإلكترونية، اتّبِع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) في السحابة الإلكترونية الخاصة لتعديل الشهادة إلى متجر موثوق به لمعالج الرسائل من Apigee Edge.

السبب: عدم تطابق اسم النطاق المؤهل بالكامل في شهادة الخادم الخلفي واسم المضيف في نقطة النهاية الهدف

إذا كان الخادم الخلفي يقدم سلسلة شهادات تحتوي على FQDN (اسم المجال المؤهل بالكامل)، وهذا لا يطابق اسم المضيف المحدد في نقطة النهاية المستهدفة، فعندئذ تعرض عملية Message Process في Apigee Edge الخطأ SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

التشخيص

  1. افحص نقطة النهاية المستهدفة المحددة في الخادم الوكيل لواجهة برمجة التطبيقات حيث تلاحظ هذا الخطأ ولاحظ اسم مضيف الخادم الخلفية:

    نموذج لنقطة نهاية الهدف:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

    في المثال أعلاه، اسم مضيف خادم الخلفية هو backend.company.com.

  2. حدِّد FQDN (اسم المجال المؤهل بالكامل) في شهادة الخادم الخلفي باستخدام الأمر openssl كما هو موضّح أدناه:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    مثال:

    openssl s_client -connect backend.company.com:443
    

    راجِع القسم Certificate chain ولاحظ اسم النطاق المؤهل بالكامل الذي تم تحديده كجزء من الاسم الشائع (CN) في موضوع الشهادة الذاتية.

    Certificate chain
     0 s:/CN=backend.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
     2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
    

    في المثال أعلاه، اسم النطاق المؤهل بالكامل لخادم الخلفية هو backend.apigee.net.

  3. إذا كان اسم المضيف لخادم الخلفية الذي تم الحصول عليه من الخطوة 1 واسم FQDN (اسم المجال المؤهل بالكامل) الذي تم الحصول عليه في الخطوة 2 غير متطابق، يكون هذا هو سبب الخطأ.
  4. في المثال الذي تمت مناقشته أعلاه، اسم المضيف في نقطة النهاية المستهدفة هو backend.company.com. في المقابل، اسم FQDN (اسم المجال المؤهل بالكامل) في شهادة الخادم الخلفي هو backend.apigee.net. بما أنهما غير متطابقين، فإنك تتلقى هذا الخطأ.

درجة الدقّة

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

اسم النطاق المؤهل بالكامل صحيح

تعديل ملف تخزين المفاتيح في خادم الخلفية باستخدام سلسلة شهادات FQDN صحيحة وكاملة:

  1. إذا لم تكن لديك شهادة خادم خلفية تتضمن اسم النطاق المؤهل بالكامل، يمكنك شراء الشهادة المناسبة من مرجع تصديق مناسب.
  2. تحقَّق من أنّ لديك سلسلة شهادات صالحة وكاملة لخادم الخلفية.

  3. بعد الحصول على سلسلة الشهادات الصالحة والكاملة مع اسم النطاق المؤهل بالكامل لخادم الخلفية في شهادة العنصر أو شهادة الكيان المطابِقة لاسم المضيف المحدد في نقطة النهاية المستهدفة، عليك تعديل ملف تخزين المفاتيح في الخلفية باستخدام سلسلة الشهادات الكاملة.

خادم الخلفية الصحيح

تعديل نقطة النهاية المستهدفة باستخدام اسم مضيف خادم الخلفية الصحيح:

  1. إذا تم تحديد اسم المضيف بشكل غير صحيح في نقطة النهاية الهدف، يجب تعديل نقطة النهاية الهدف لتتضمّن اسم المضيف الصحيح الذي يطابق اسم النطاق المؤهل بالكامل في شهادة خادم الخلفية.
  2. احفظ التغييرات التي تم إدخالها على الخادم الوكيل لواجهة برمجة التطبيقات.

    في المثال المذكور أعلاه، إذا تم تحديد اسم مضيف خادم الخلفية بشكل غير صحيح، يمكنك إصلاحه باستخدام اسم النطاق المؤهل بالكامل من شهادة الخادم الخلفية، وسيكون النطاق backend.apigee.net على النحو التالي:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

السبب: شهادة غير صحيحة/غير مكتملة أو سلسلة شهادات مقدّمة من خادم الخلفية

التشخيص

  1. يمكنك الحصول على سلسلة شهادات خادم الخلفية من خلال تنفيذ الأمر openssl على اسم مضيف الخادم الخلفية على النحو التالي:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    اطّلِع على Certificate chain من مخرجات الأمر الوارد أعلاه.

    نموذج سلسلة شهادات خادم الخلفية من ناتج أمر opensl:

    Certificate chain
     0 s:/CN=mocktarget.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       
  2. تأكَّد من أنّ لديك سلسلة الشهادات الصحيحة والكاملة كما هو موضّح في التحقّق من سلسلة الشهادات.
  3. إذا لم تتوفّر لديك سلسلة الشهادات الصالحة والكاملة لخادم الخلفية، يكون سبب هذه المشكلة هو السبب.

    في نموذج سلسلة شهادات خادم الخلفية الموضحة أعلاه، الشهادة الجذر غير متوفرة. لذلك، تظهر لك هذا الخطأ.

درجة الدقّة

حدِّث ملف تخزين المفاتيح في خادم الخلفية باستخدام سلسلة شهادات صالحة وكاملة:

  1. تحقَّق من أنّ لديك سلسلة شهادات صالحة وكاملة لخادم الخلفية.

  2. حدِّث سلسلة الشهادات الصالحة والكاملة في مخزن مفاتيح خادم الخلفية.

في حال استمرار المشكلة، انتقِل إلى جمع معلومات التشخيص.

ضرورة جمع معلومات التشخيص

في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية والتواصل مع فريق دعم Apigee Edge:

  • إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
    • اسم المؤسسة
    • اسم البيئة
    • اسم الخادم الوكيل لواجهة برمجة التطبيقات
    • إكمال الأمر curl لإعادة إظهار الخطأ
    • ملف التتبُّع الذي يظهر فيه الخطأ
    • نتيجة الأمر openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • حزم TCP/IP التي تم التقاطها على خادم الخلفية
  • إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:

المراجع