أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة 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 Private Cloud وEdge Public Cloud |
| عدم تطابق اسم النطاق المؤهَّل بالكامل في شهادة خادم الخلفية واسم المضيف في نقطة النهاية المستهدَفة | تحتوي الشهادة التي يقدّمها خادم الخلفية على اسم نطاق مؤهّل بالكامل لا يتطابق مع اسم المضيف المحدّد في نقطة النهاية المستهدَفة. | مستخدمو Edge Private Cloud وEdge Public Cloud |
| شهادة أو سلسلة شهادات غير صحيحة أو غير مكتملة قدّمها خادم الخلفية | سلسلة الشهادات التي يقدّمها خادم الخلفية غير صحيحة أو غير مكتملة. | مستخدمو Edge Private Cloud وEdge Public Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
API Monitoring
الإجراء 1: استخدام "مراقبة واجهة برمجة التطبيقات"
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge بصفتك مستخدمًا لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
رسم بياني لرمز الخطأ مقابل الوقت
اختَر الخلية التي تحتوي على رمز الخطأ
messaging.adaptors.http.flow.SslHandshakeFailedكما هو موضّح أدناه:
تظهر المعلومات حول رمز الخطأ
messaging.adaptors.http.flow.SslHandshakeFailedكما هو موضّح أدناه:
انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلّات، سجِّل التفاصيل التالية:
- معرّف رسالة الطلب
- رمز الحالة:
503 - مصدر الخطأ:
target - رمز الخطأ:
messaging.adaptors.http.flow.SslHandshakeFailed
التتبّع
الإجراء رقم 2: استخدام أداة "التتبُّع"
لتشخيص الخطأ باستخدام "أداة التتبُّع"، اتّبِع الخطوات التالية:
- فعِّل جلسة التتبُّع، ثم اتّبِع إحدى الخطوتَين التاليتَين:
- انتظِر حدوث الخطأ
503 Service Unavailableبرمز الخطأmessaging.adaptors.http.flow.SslHandshakeFailed، أو - إذا كان بإمكانك إعادة إظهار المشكلة، أرسِل طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهارها
503 Service Unavailable
- انتظِر حدوث الخطأ
تأكَّد من تفعيل خيار عرض جميع معلومات FlowInfo:

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

- يُرجى ملاحظة قيم ما يلي من التتبُّع:
- الخطأ:
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-fault-code وX-Apigee-fault-source وX-Apigee-Message-ID كما هو موضّح أدناه:

- دوِّن قيم X-Apigee-fault-code وX-Apigee-fault-source وX-Apigee-Message-ID:
| عناوين الأخطاء | القيمة |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
الإجراء رقم 3: استخدام سجلّات الوصول إلى NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلات الوصول إلى NGINX لتحديد المعلومات الأساسية حول
503 Service Unavailableعبر HTTP. تحقَّق من سجلّات الوصول إلى 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 مع قيمةmessaging.adaptors.http.flow.SslHandshakeFailed، حدِّد قيمة X-Apigee-fault-source.مثال على الخطأ 503 من سجلّ الوصول إلى NGINX:
يحتوي نموذج الإدخال أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لكل من X-Apigee-fault-code وX-Apigee-fault-source:
العناوين القيمة X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-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-1NIOThread@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-1NIOThread@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 targetat 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#
لاحظ سلسلة الشهادات من ناتج الأمر أعلاه:
نموذج لسلسلة شهادات خادم الخلفية من ناتج أمر openssl:
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
- إذا كنت مستخدمًا في السحابة الإلكترونية العامة، سجِّل حِزم TCP/IP على خادم الخلفية.
- إذا كنت مستخدمًا في Private Cloud، يمكنك التقاط حِزم 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.يشير ذلك إلى تعذُّر التحقّق من صحة شهادة خادم الخلفية بواسطة معالج الرسائل. ويرجع ذلك إلى أنّ "معالج الرسائل" لا يتضمّن أي شهادة تتطابق مع شهادة خادم الخلفية أو لا يمكنه الوثوق بشهادة خادم الخلفية باستخدام الشهادات المتوفّرة في ملف truststore الخاص به (أي "معالج الرسائل").
يمكنك الرجوع إلى الحزمة رقم 45 ومراجعتها وتحديد سلسلة الشهادات التي أرسلها خادم الخلفية.
- في هذا المثال، يمكنك ملاحظة أنّ الخادم أرسل شهادة ورقة
مع
common name (CN) = mocktarget.apigee.net، تليها شهادة متوسطة معCN= GTS CA 1D4وشهادة جذر معCN = GTX Root R1.
إذا تبيّن لك أنّ عملية التحقّق من شهادة الخادم قد تعذّرت، انتقِل إلى المرحلة 2: مقارنة شهادة خادم الخلفية بالشهادات المخزّنة في ملف truststore الخاص بـ "معالج الرسائل".
- الحزمة رقم 43: أرسل معالج الرسائل (المصدر) رسالة
المرحلة 2
المرحلة 2: مقارنة شهادة خادم الخلفية بالشهادات المخزَّنة في ملف truststore الخاص بـ "معالج الرسائل"
- تحديد سلسلة شهادات خادم الخلفية
- حدِّد الشهادة المخزّنة في truststore الخاص بـ "معالج الرسائل" باتّباع الخطوات التالية:
احصل على اسم مرجع ملف 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 هو:
myCompanyTruststoreRef:
myCompanyTruststore
احصل على الشهادات المخزَّنة في مستودع الشهادات الموثوقة (التي تم تحديدها في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
الحصول على جميع الشهادات لملف تخزين مفاتيح أو ملف تخزين موثوق تعرض واجهة برمجة التطبيقات هذه جميع الشهادات في مستودع المفاتيح الموثوق به المحدّد.
مستخدم السحابة الإلكترونية العامة:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
مستخدم السحابة الإلكترونية الخاصة:
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
نموذج الناتج:
الشهادات من متجر الثقة النموذجي
myCompanyTruststoreهي:[ "serverCert" ]
-
الحصول على تفاصيل الشهادة المحدّدة من Keystore أو 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"
مستخدم Private 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",
تتطابق الشهادة الوسيطة المخزَّنة في مستودع الشهادات الموثوقة مع شهادة خادم الخلفية.
- شهادة الجذر:
من خادم الخلفية:
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، يعرض معالج الرسائل الاستثناء التالي:
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على تطبيقات العميل.
- شهادة غير مخوّلة للتصديق:
الدقة
- تأكَّد من توفُّر سلسلة الشهادات المناسبة والكاملة لخادم الخلفية.
- إذا كنت مستخدمًا في السحابة الإلكترونية العامة، اتّبِع التعليمات الواردة في تعديل شهادة TLS للسحابة الإلكترونية لتعديل الشهادة في مستودع الثقة الخاص بـ "معالج الرسائل" في Apigee Edge.
- إذا كنت من مستخدمي Private Cloud، اتّبِع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) في Private Cloud لتعديل الشهادة في مخزن الثقة الخاص بـ "معالج الرسائل" في Apigee Edge.
السبب: عدم تطابق اسم النطاق المؤهَّل بالكامل في شهادة خادم الخلفية مع اسم المضيف في نقطة النهاية المستهدَفة
إذا كان خادم الخلفية يعرض سلسلة شهادات تحتوي على اسم نطاق مؤهَّل بالكامل (FQDN) لا يتطابق مع اسم المضيف المحدّد في نقطة النهاية المستهدَفة، ستعرض "معالجة الرسائل" في 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:
<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. حدِّد اسم النطاق المؤهَّل بالكامل في شهادة خادم الخلفية باستخدام الأمر
opensslكما هو موضّح أدناه:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
على سبيل المثال:
openssl s_client -connect backend.company.com:443
افحص القسم
Certificate chainولاحظ اسم النطاق المؤهّل بالكامل المحدّد كجزء من الاسم الشائع في موضوع شهادة العقدة الطرفية.Certificate chain 0 s:/
CN=backend.apigee.neti:/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 مع اسم النطاق المؤهَّل بالكامل الذي تم الحصول عليه في الخطوة 2، يكون ذلك هو سبب الخطأ.
- في المثال المذكور أعلاه، اسم المضيف في نقطة النهاية المستهدَفة هو
backend.company.com. ومع ذلك، فإنّ اسم النطاق المؤهَّل بالكامل في شهادة خادم الخلفية هوbackend.apigee.net. وبما أنّهما لا يتطابقان، يظهر لك هذا الخطأ.
الدقة
يمكنك حلّ هذه المشكلة باستخدام إحدى الطريقتَين التاليتَين:
اسم المجال المؤهَّل بالكامل الصحيح
تعديل مخزن المفاتيح الخاص بخادم الخلفية باستخدام اسم المجال المؤهَّل بالكامل الصحيح وسلسلة شهادات صالحة وكاملة:
- إذا لم تكن لديك شهادة خادم خلفي تتضمّن اسم النطاق المؤهّل بالكامل الصحيح، عليك الحصول على الشهادة المناسبة من مرجع تصديق مناسب.
- بعد الحصول على سلسلة الشهادات الصالحة والكاملة التي تتضمّن اسم النطاق المؤهَّل بالكامل الصحيح لخادم الخلفية في شهادة الورقة أو الكيان، والذي يتطابق مع اسم المضيف المحدّد في نقطة النهاية المستهدَفة، عليك تعديل ملف تخزين المفاتيح الخاص بخادم الخلفية باستخدام سلسلة الشهادات الكاملة.
خادم الخلفية الصحيح
عدِّل نقطة النهاية المستهدَفة باستخدام اسم المضيف الصحيح لخادم الخلفية:
- إذا تم تحديد اسم المضيف بشكل غير صحيح في نقطة النهاية المستهدَفة، عدِّل نقطة النهاية المستهدَفة لتضمين اسم المضيف الصحيح الذي يتطابق مع اسم النطاق المؤهَّل بالكامل في شهادة خادم الخلفية.
احفظ التغييرات في خادم وكيل واجهة برمجة التطبيقات.
في المثال الموضّح أعلاه، إذا تم تحديد اسم مضيف خادم الخلفية بشكل غير صحيح، يمكنك إصلاح ذلك باستخدام اسم النطاق المؤهّل بالكامل من شهادة خادم الخلفية، أي
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من ناتج الأمر أعلاه.نموذج سلسلة شهادات خادم الخلفية من ناتج أمر openssl:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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:
- إذا كنت مستخدمًا للسحابة الإلكترونية العامة، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم خادم وكيل لواجهة برمجة التطبيقات
- أكمِل الأمر
curlلإعادة إظهار الخطأ - ملف التتبُّع الذي يعرض الخطأ
نتيجة الأمر
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- حِزم بروتوكول TCP/IP التي تم التقاطها على خادم الخلفية
- إذا كنت مستخدمًا في Private Cloud، يُرجى تقديم المعلومات التالية:
- رسالة الخطأ الكاملة التي ظهرت
- حِزمة خادم وكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الذي يعرض الخطأ
- سجلّات "معالج الرسائل"
/opt/apigee/var/log/edge-message-processor/logs/system.log - نتيجة الأمر
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - حِزم بروتوكول TCP/IP التي تم التقاطها على خادم الخلفية أو "معالج الرسائل"
- ناتج واجهة برمجة التطبيقات Get all certificates for a keystore or truststore، بالإضافة إلى تفاصيل كل شهادة تم الحصول عليها باستخدام واجهة برمجة التطبيقات Get Cert Details from a Keystore or Truststore
المراجع
- سلسلة الثقة للشهادة
- أمر OpenSSL