502 بوابة غير صالحة - شهادة موقعة ذاتيًا في سلسلة

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

المشكلة

يتلقّى تطبيق العميل رمز استجابة HTTP لـ 502 مع الرسالة Bad Gateway كاستجابة لطلبات واجهة برمجة التطبيقات في Edge Microgateway.

بدلاً من ذلك، ستظهر للمشرف رسالة الخطأ self signed certificate in certificate chain عند تشغيل الأمر edgemicro configure.

رسالة الخطأ

ستظهر للعميل رسالة الرد التالية:

HTTP/1.1 502 Bad Gateway

هناك مثالان شائعان للردود على الخطأ:

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

بدلاً من ذلك، يمكن أن يحدث هذا الخطأ عند تشغيل "edgemicro configure":

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

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

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
يقدم الخادم الهدف شهادة موقَّعة ذاتيًا سيتحقّق Edge Microgateway من شهادة الخادم الهدف، وإذا لم يكن موثوقًا به، سيؤدي ذلك إلى حدوث خطأ في وقت التشغيل. مستخدمو Edge العام والخاص على السحابة الإلكترونية
يستخدم خادم إدارة Apigee Edge شهادة موقَّعة ذاتيًا عند ضبط Edge Microgateway لأول مرة، سيتم الاتصال بـ Apigee Edge عبر بروتوكول أمان طبقة النقل (TLS) لبدء التشغيل. إذا قدّم Edge شهادة موقَّعة ذاتيًا، لن تنجح هذه العملية. مستخدمو Edge Private Cloud

السبب: يقدم الخادم الهدف شهادة موقَّعة ذاتيًا

إذا قدّم الخادم الهدف شهادة موقَّعة ذاتيًا من خلال الخادم الهدف عند الاتصال بالمنطقة الجنوبية، سيعرض Edge Microgateway هذا الخطأ تلقائيًا لأنّه لا يثق في الشهادات الموقَّعة ذاتيًا.

التشخيص

قد يظهر الخطأ التالي في السجلّات (/var/tmp/edgemicro-`hostname`- *.log):

2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80-
b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate
chain][SELF_SIGNED_CERT_IN_CHAIN][]

يشير رمز الخطأ SELF_SIGNED_CERT_IN_CHAIN إلى أنّ Edge Microgateway قد تلقّى على الأرجح شهادة موقَّعة ذاتيًا من الخادم الهدف. لتأكيد ذلك، اتّبِع الخطوات التالية:

  1. نفِّذ الأمر openssl التالي للتحقّق من سلسلة شهادات الخادم الهدف:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. إذا كانت سلسلة شهادات الخادم الهدف موقَّعة ذاتيًا، يكون سبب المشكلة هو سبب المشكلة.

    في المثال التالي، لاحظ أن الخادم الهدف يقدم شهادة موقَّعة ذاتيًا:

    echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
    
    depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    DONE
    

درجة الدقّة

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

    الخيار 1: ضبط خاصية نظام للسماح لبرنامج Edge Microgateway بالوثوق في جميع الشهادات

    1. في حال استخدام Docker، راجِع استخدام مرجع تصديق غير موثوق به في Node.js
    2. ويمكنك بدلاً من ذلك تصدير متغيّر بيئة يُسمى NODE_EXTRA_CA_CERTS للإشارة إلى ملف CA الجذري.

      وقد تم توثيق ذلك على موقع Node.js الرسمي.

    الخيار 2: ضبط ملف إعداد Edge Microgateway YAML للثقة في تلك الشهادة المحدّدة لهذا الخادم المستهدف

    1. تأكَّد من توفُّر شهادة (أو سلسلة) الخادم الهدف بتنسيق PEM. لتحويل تنسيقات الشهادات الأخرى إلى PEM، اتّبِع التعليمات الواردة في تحويل الشهادات إلى تنسيق متوافق.
    2. في حال توفُّر سلسلة شهادات، تأكَّد من أنّ الشهادات بالترتيب الصحيح. ويجب أن تكون الشهادة الطرفية أولاً أولاً، متبوعة بالشهادة المتوسطة، ثم شهادة الجذر. هناك مزيد من التفسيرات حول هذا الموضوع في عملية التحقق من سلسلة الشهادات.

      في المثال التالي، تم ضبط ملف مرجع التصديق الموثوق به لـ untrusted-root.badssl.com.

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    وتتوفّر أيضًا تعليمات ضبط هذه الميزة في وحدة Edge Microgateway - لضبط بروتوكول أمان طبقة النقل (TLS) الأحادي الاتجاه وثنائي الاتجاه لبروتوكول أمان طبقة النقل (TLS) باتجاه الجنوب. راجِع ضبط طبقة المقابس الآمنة على خادم Edge Microgateway للحصول على مزيد من المعلومات.

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

السبب: يستخدم خادم إدارة Apigee Edge شهادة موقَّعة ذاتيًا

عند إعداد Edge Microgateway لأول مرة، سيكون أحد الأوامر التي ستحتاج إلى تشغيلها هو edgemicro configure أو edgemicro private configure. سيؤدي هذا الأمر إلى بدء تشغيل المجموعة، وسيتصل بخدمة Apigee Edge لتنزيل المعلومات المطلوبة.

بالنسبة إلى Edge Private Cloud، يتم تحديد عنوان URL لخادم الإدارة من خلال الوسيطة -m. في حال تفعيل بروتوكول أمان طبقة النقل (TLS) لخادم الإدارة، سيحاول Edge Microgateway التحقُّق من الشهادة التي يقدّمها خادم الإدارة.

إليك مثال على أمر edgemicro configure لـ Edge Private Cloud على النحو التالي:

edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443

إذا تم إعداد خادم الإدارة باستخدام شهادة موقَّعة ذاتيًا، سيظهر لك الخطأ التالي في نتائج وحدة التحكّم.

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

التشخيص

  1. في هذه الحالة، قد يعرض خادم الإدارة (management.apigee-dev.net) شهادة بروتوكول أمان طبقة النقل (TLS) موقَّعة ذاتيًا.
  2. من المرجح أن يكون مشرف نظام Apigee Edge قد قدّم الشهادة ولديه نسخة منها.
  3. بخلاف ذلك، يمكنك تنفيذ الأمر التالي للحصول على معلومات حول الشهادة:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. إذا كان خادم الإدارة يتضمّن شهادة موقَّعة ذاتيًا، يكون السبب في هذه المشكلة.

درجة الدقّة

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

  3. اضبط خاصية نظام للسماح لـ Edge Microgateway بالوثوق في جميع الشهادات.
  4. في حال استخدام Docker، راجِع استخدام مرجع تصديق غير موثوق به في Node.js
  5. ويمكنك بدلاً من ذلك تصدير متغيّر بيئة يُسمى NODE_EXTRA_CA_CERTS للإشارة إلى ملف CA الجذري.وقد تم توثيق ذلك على موقع Node.js الإلكتروني الرسمي.

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

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