يتم الآن عرض مستندات 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 |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
messaging.adaptors.http.flow.SslHandshakeFailed
كما هو موضّح أدناه:يتم عرض المعلومات المتعلقة برمز الخطأ
messaging.adaptors.http.flow.SslHandshakeFailed
كما هو موضّح أدناه:انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.
- من نافذة السجلّات، دوِّن التفاصيل التالية:
- طلب معرّف الرسالة
- رمز الحالة:
503
- مصدر الخطأ:
target
- رمز الخطأ:
messaging.adaptors.http.flow.SslHandshakeFailed
التتبّع
الإجراء الثاني: استخدام أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبُّع وإمّا
- انتظِر حتى يظهر الخطأ
503 Service Unavailable
الذي يتضمّن رمز الخطأmessaging.adaptors.http.flow.SslHandshakeFailed
. - إذا كان بإمكانك إعادة إظهار المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة.
503 Service Unavailable
- انتظِر حتى يظهر الخطأ
تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
- تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
سيظهر لك الخطأ عادةً بعد مرحلة بدء تدفق الطلب المستهدَف كما هو موضّح أدناه:
- دوِّن قيم ما يلي من سجلّ التتبّع:
- خطأ:
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 لم يتمكن من التحقّق من شهادة الخادم الخلفية.
- خطأ:
- انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
انتقِل إلى قسم عناوين خطأ المرحلة وحدد قيم X-Apigee- error-code وX-Apigee-error-source وX-Apigee-Message-ID كما هو موضّح أدناه:
- لاحِظ قيم X-Apigee-fault-code وX-Apigee-fault-code وX-Apigee-fault-code:
عناوين الأخطاء | القيمة |
---|---|
X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
X-Apigee-fault-source | target |
X-Apigee-Message-ID | MESSAGE_ID |
NGINX
الإجراء 3: استخدام سجلات الوصول إلى NGINX
لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد
المعلومات الأساسية حول HTTP
503 Service Unavailable
. تحقَّق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- ابحث عن أي أخطاء
503
تتضمّن رمز الخطأmessaging.adaptors.http.flow.SslHandshakeFailed
خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو لمعرفة ما إذا كانت هناك أي طلبات لا تزال يتعذّر تنفيذها مع503
. إذا عثرت على أي أخطاء
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: استخدام سجلات معالج الرسائل
- حدِّد معرِّف الرسالة لأحد الطلبات التي تعذّر تنفيذها باستخدام "مراقبة واجهة برمجة التطبيقات" أو "أداة التتبُّع" أو سجلات الوصول في NGINX كما هو موضّح في خطوات التشخيص الشائعة.
ابحث عن معرِّف رسالة الطلب المحدد في سجلّ معالج الرسائل (
/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 لمعالج الرسائل
التشخيص
- حدِّد رمز الخطأ أو مصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كان رمز الخطأ هو
messaging.adaptors.http.flow.SslHandshakeFailed
، يمكنك تحديد رسالة الخطأ باستخدام إحدى الطريقتَين التاليتَين: - ابحث عن error.cause باستخدام أداة التتبُّع كما هو موضَّح في خطوات التشخيص الشائعة.
- ابحث عن الاستثناء باستخدام سجلات معالج الرسائل كما هو موضّح في خطوات التشخيص الشائعة.
- ابحث عن
faultstring
في ردّ الخطأ على طلب البيانات من واجهة برمجة التطبيقات كما يظهر في رسالة الخطأ. - إذا كانت رسالة الخطأ
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: تحديد سلسلة شهادات الخادم الخلفي
- المرحلة 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
- إذا كنت من مستخدمي Cloud Cloud، ننصحك بالتقاط حزم TCP/IP على خادم الخلفية.
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك عندئذٍ التقاط حزم TCP/IP على الخادم الخلفية أو معالج الرسائل. ويُفضَّل أن تلتقطها على خادم الخلفية لأنه يتم فك تشفير الحِزم على الخادم الخلفي.
استخدِم الأمر tcpdump التالي لالتقاط حزم TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
حلِّل حزم 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 لمعالج الرسائل.
- الحزمة رقم 43: أرسل معالج الرسائل (المصدر) رسالة
المرحلة 2
المرحلة الثانية: مقارنة شهادة خادم الخلفية والشهادات المخزّنة في Truststores لمعالج الرسائل
- تحديد سلسلة شهادات الخادم الخلفية.
- حدِّد الشهادة المخزنة في مخزن الثقة الخاص بـ "معالج الرسائل" باتّباع الخطوات التالية:
احصل على الاسم المرجعي لمتجر 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>
- في المثال أعلاه، اسم المرجع
TrustStore
هوmyCompanyTruststoreRef
. في واجهة مستخدم Edge، حدد البيئات > المراجع. دوِّن الاسم الوارد في عمود المرجع لمرجع Truststore المحدد. سيكون هذا هو اسم متجرك الموثوق به.
في المثال أعلاه، اسم Truststore هو:
myCompanyTruststoreRef:
myCompanyTruststore
يمكنك الحصول على الشهادات المخزَّنة في Truststore (تم تحديد هذه الشهادات في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
احصل على جميع الشهادات لملف تخزين مفاتيح تشفير أو ملف تخزين موثوق به. تعرض واجهة برمجة التطبيقات هذه جميع الشهادات في 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" ]
-
الحصول على تفاصيل الشهادة للشهادة المحدَّدة من أحد ملفات تخزين المفاتيح أو 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",
تأكَّد من مطابقة شهادة الخادم الفعلية التي تم الحصول عليها في الخطوة 1 والشهادة المخزّنة في Truststore التي تم الحصول عليها في الخطوة 3. في حال عدم التطابق، هذا هو سبب المشكلة.
من المثال المعروض أعلاه، دعنا نلقِ نظرة على شهادة واحدة في كل مرة:
- الشهادة التفصيلية:
من خادم الخلفية:
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 مع شهادة خادم الخلفية.
- الشهادة المتوسطة:
من خادم الخلفية:
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 مع شهادة الخادم الخلفية.
- شهادة الجذر:
من خادم الخلفية:
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 لمعالج الرسائل.
بسبب عدم توفُّر شهادة الجذر في 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
لتطبيقات العميل
- الشهادة التفصيلية:
درجة الدقّة
- تأكَّد من أن لديك سلسلة الشهادات الصحيحة والكاملة لخادم الخلفية.
- إذا كنت مستخدمًا على Cloud Cloud، اتّبِع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) للسحابة الإلكترونية لتعديل الشهادة إلى متجر موثوق به لمعالج الرسائل من Apigee Edge.
- إذا كنت مستخدمًا خاصًا في السحابة الإلكترونية، اتّبِع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (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
.
التشخيص
- افحص نقطة النهاية المستهدفة المحددة في الخادم الوكيل لواجهة برمجة التطبيقات حيث تلاحظ هذا الخطأ ولاحظ اسم مضيف الخادم الخلفية:
نموذج لنقطة نهاية الهدف:
<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
. حدِّد 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
.- إذا كان اسم المضيف لخادم الخلفية الذي تم الحصول عليه من الخطوة 1 واسم FQDN (اسم المجال المؤهل بالكامل) الذي تم الحصول عليه في الخطوة 2 غير متطابق، يكون هذا هو سبب الخطأ.
- في المثال الذي تمت مناقشته أعلاه، اسم المضيف في نقطة النهاية المستهدفة هو
backend.company.com
. في المقابل، اسم FQDN (اسم المجال المؤهل بالكامل) في شهادة الخادم الخلفي هوbackend.apigee.net
. بما أنهما غير متطابقين، فإنك تتلقى هذا الخطأ.
درجة الدقّة
يمكنك حلّ هذه المشكلة باستخدام إحدى الطرق التالية:
اسم النطاق المؤهل بالكامل صحيح
تعديل ملف تخزين المفاتيح في خادم الخلفية باستخدام سلسلة شهادات 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>
السبب: شهادة غير صحيحة/غير مكتملة أو سلسلة شهادات مقدّمة من خادم الخلفية
التشخيص
- يمكنك الحصول على سلسلة شهادات خادم الخلفية من خلال تنفيذ الأمر
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 - تأكَّد من أنّ لديك سلسلة الشهادات الصحيحة والكاملة كما هو موضّح في التحقّق من سلسلة الشهادات.
إذا لم تتوفّر لديك سلسلة الشهادات الصالحة والكاملة لخادم الخلفية، يكون سبب هذه المشكلة هو السبب.
في نموذج سلسلة شهادات خادم الخلفية الموضحة أعلاه، الشهادة الجذر غير متوفرة. لذلك، تظهر لك هذا الخطأ.
درجة الدقّة
حدِّث ملف تخزين المفاتيح في خادم الخلفية باستخدام سلسلة شهادات صالحة وكاملة:
- حدِّث سلسلة الشهادات الصالحة والكاملة في مخزن مفاتيح خادم الخلفية.
في حال استمرار المشكلة، انتقِل إلى جمع معلومات التشخيص.
ضرورة جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية والتواصل مع فريق دعم Apigee Edge:
- إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
لإعادة إظهار الخطأ - ملف التتبُّع الذي يظهر فيه الخطأ
نتيجة الأمر
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- حزم TCP/IP التي تم التقاطها على خادم الخلفية
- إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:
- تم رصد رسالة خطأ مكتملة.
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الذي يظهر فيه الخطأ
- سجلات معالج الرسائل في
/opt/apigee/var/log/edge-message-processor/logs/system.log
- نتيجة الأمر
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- حزم TCP/IP التي تم التقاطها على خادم الخلفية أو معالج الرسائل.
- نتيجة الحصول على جميع الشهادات من واجهة برمجة تطبيقات تخزين المفاتيح أو Truststore بالإضافة إلى تفاصيل كل شهادة تم الحصول عليها باستخدام الحصول على تفاصيل الشهادات من واجهة برمجة التطبيقات Keystore أو Truststore
المراجع
- شهادة سلسلة الثقة
- الأمر OpenSSL