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 بسبب إخفاق أثناء طبقة المقابس الآمنة عملية تأكيد الاتصال بين معالج الرسائل في 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 خادم الخلفية:

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

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

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
شهادة أو سلسلة شهادات غير صحيحة/غير مكتملة في المخزن الموثوق به لمعالج الرسائل لا تتطابق الشهادة و/أو سلسلتها المخزّنة في التخزين الموثوق به في معالج الرسائل في Apigee Edge مع سلسلة شهادات خادم الخلفية أو لا تحتوي على سلسلة الشهادات الكاملة لخادم الخلفية. مستخدمو Edge Private وPublic Cloud
عدم تطابق اسم النطاق المؤهل بالكامل في شهادة خادم الخلفية واسم المضيف في نقطة النهاية المستهدفة تحتوي الشهادة المقدَّمة من خادم الخلفية على اسم FQDN (اسم المجال المؤهل بالكامل) لا يتطابق مع اسم المضيف المحدَّد في نقطة النهاية الهدف. مستخدمو Edge Private وPublic Cloud
الشهادة أو سلسلة الشهادات التي قدّمها خادم الخلفية غير صحيحة/غير مكتملة سلسلة الشهادات التي قدمها خادم الخلفية إما غير صحيحة أو غير كاملة. مستخدمو Edge Private وPublic 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

التتبّع

الإجراء رقم 2: استخدام أداة التتبُّع

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

  1. فعِّل جلسة التتبع وإمّا
    • انتظار ظهور الخطأ "503 Service Unavailable" الذي يظهر رمز الخطأ سيحدث messaging.adaptors.http.flow.SslHandshakeFailed، أو
    • إذا كان يمكنك إعادة إنتاج المشكلة، يُرجى طلب بيانات من واجهة برمجة التطبيقات لإعادة إنتاج المشكلة. 503 Service Unavailable
  2. تأكَّد من تفعيل عرض كل 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 إلى إخفاق تأكيد اتصال طبقة المقابس الآمنة، لأنّ معالج الرسائل في Apigee Edge لم يتمكّن من التحقّق من صحة بيانات خادم الخلفية الشهادة.
  7. انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
  8. مرِّر لأسفل إلى قسم عناوين الخطأ في تفاصيل المرحلة وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code، X-Apigee-Message-ID كما هو موضّح أدناه:

    ( عرض صورة أكبر)

  9. دوِّن قيم X-Apigee-fault-code وX-Apigee-fault-code، وX-Apigee-Message-ID:
  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 قيمة messaging.adaptors.http.flow.SslHandshakeFailed، ثم تحديد قيمة X-Apigee-fault-source..

    نموذج الخطأ 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. تعذر التحقق من شهادة خادم الخلفية.

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

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. سجلات وصول المراقبة أو أداة التتبع أو NGINX كما هو موضح في مقالة Common خطوات التشخيص.
  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: مقارنة سلسلة الشهادات المخزَّنة في المخزن الموثوق به لمعالج الرسائل

المرحلة 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. إذا كنت مستخدمًا سحابيًا عامًا، يمكنك التقاط حزم 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: مقارنة شهادة خادم الخلفية. والشهادات المخزَّنة في المخزن الموثوق به لمعالج الرسائل.

المرحلة 2

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

  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 المحدّد. سيكون هذا Truststore.

      ( عرض صورة أكبر)

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

      myCompanyTruststoreRef: myCompanyTruststore

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

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

      مستخدم Cloud العام:

      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.

      مستخدم Cloud العام:

      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 Public، يُرجى اتّباع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) للسحابة الإلكترونية لتعديل الشهادة إلى إصدار Apigee Edge مخزن موثوق به لمعالج الرسائل
  3. إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية، يُرجى اتّباع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) الخاصة بالسحابة الإلكترونية الخاصة لتعديل الشهادة إلى مخزن الثقة في معالج الرسائل في Apigee Edge

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

إذا قدّم خادم الخلفية سلسلة شهادات تحتوي على اسم النطاق المؤهل بالكامل، والتي لا تتطابق مع اسم المضيف المحدد في نقطة النهاية المستهدفة، فإن عملية الرسائل في 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 ولاحظ أن FQDN (اسم المجال المؤهل بالكامل) محدد جزء من 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
    

    في المثال أعلاه، يكون FQDN (اسم المجال المؤهل بالكامل) لخادم الخلفية هو backend.apigee.net.

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

الدقة

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

FQDN (اسم المجال المؤهل بالكامل) صحيح

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

  1. إذا لم تكن لديك شهادة خادم خلفية مع اسم FQDN (اسم المجال المؤهل بالكامل) الصحيح، ثم شراء الشهادة المناسبة من مرجع تصديق (CA) مناسب.
  2. تحقق من أن لديك سلسلة شهادات خادم الخلفية الصالحة وكاملة

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

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

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

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

    في المثال الذي تمت مناقشته أعلاه، إذا تم إدخال اسم مضيف خادم الخلفية بشكل غير صحيح يمكنك إصلاحها باستخدام FQDN (اسم المجال المؤهل بالكامل) من شهادة خادم الخلفية، التي تكون 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:

المراجع