أنت تعرض مستندات 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 |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم 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
- انتظار ظهور الخطأ "
تأكَّد من تفعيل عرض كل 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
إلى إخفاق تأكيد اتصال طبقة المقابس الآمنة، لأنّ معالج الرسائل في Apigee Edge لم يتمكّن من التحقّق من صحة بيانات خادم الخلفية الشهادة.
- الخطأ:
- انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
مرِّر لأسفل إلى قسم عناوين الخطأ في تفاصيل المرحلة وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code، X-Apigee-Message-ID كما هو موضّح أدناه:
- دوِّن قيم X-Apigee-fault-code وX-Apigee-fault-code، و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:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول 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 قيمة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: استخدام سجلات معالج الرسائل
- حدد معرف الرسالة لأحد الطلبات التي تعذّر تنفيذها باستخدام أداة مراقبة واجهة برمجة التطبيقات أو أداة التتبع أو سجلات وصول 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. تعذر التحقق من شهادة خادم الخلفية.
السبب: شهادة أو سلسلة شهادات غير صحيحة/غير مكتملة في المخزن الموثوق به لمعالج الرسائل
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. سجلات وصول المراقبة أو أداة التتبع أو NGINX كما هو موضح في مقالة Common خطوات التشخيص.
- إذا كان رمز الخطأ هو
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: مقارنة سلسلة الشهادات المخزَّنة في المخزن الموثوق به لمعالج الرسائل
المرحلة 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
- إذا كنت مستخدمًا سحابيًا عامًا، يمكنك التقاط حزم 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: مقارنة شهادة خادم الخلفية. والشهادات المخزَّنة في المخزن الموثوق به لمعالج الرسائل.
- الحزمة رقم 43: أرسل معالج الرسائل (المصدر)
المرحلة 2
المرحلة 2: مقارنة شهادة خادم الخلفية والشهادات المخزَّنة في متجر الثقة الخاص بمعالج الرسائل
- تحديد سلسلة شهادات خادم الخلفية
- حدد الشهادة المخزنة في المخزن الموثوق به لمعالج الرسائل باستخدام
الخطوات التالية:
الحصول على الاسم المرجعي لـ 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.
في المثال أعلاه، يكون اسم Truststore هو:
myCompanyTruststoreRef:
myCompanyTruststore
الحصول على الشهادات المخزَّنة في Truststore (يتم تحديد ذلك في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
يمكنك الحصول على جميع الشهادات التي تخص ملف تخزين مفاتيح أو ملف تخزين موثوق به. تسرد واجهة برمجة التطبيقات هذه جميع الشهادات في المخزن الموثوق به المحدد.
مستخدم 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" ]
-
يمكنك الحصول على تفاصيل الشهادة للشهادة المحدَّدة من أحد ملفات تخزين المفاتيح أو المخزن الموثوق بها.
تعرض واجهة برمجة التطبيقات هذه معلومات حول شهادة محددة في ملف
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",
التحقّق من أن شهادة الخادم الفعلية التي تم الحصول عليها في الخطوة 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 Public، يُرجى اتّباع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (TLS) للسحابة الإلكترونية لتعديل الشهادة إلى إصدار Apigee Edge مخزن موثوق به لمعالج الرسائل
- إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية، يُرجى اتّباع التعليمات الواردة في تعديل شهادة بروتوكول أمان طبقة النقل (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
التشخيص
- افحص نقطة النهاية المستهدفة المحددة في الخادم الوكيل لواجهة برمجة التطبيقات الذي تلاحظ فيه هذا.
ولاحظ اسم مضيف خادم الخلفية:
نموذج نقطة النهاية المستهدفة:
<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
ولاحظ أن 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
.- إذا تم الحصول على اسم المضيف لخادم الخلفية الذي تم الحصول عليه من الخطوة 1 واسم النطاق المؤهل بالكامل الخطوة 2 غير متطابقة، فهذا هو سبب الخطأ.
- في المثال المذكور أعلاه، يكون اسم المضيف في نقطة النهاية المستهدفة هو
backend.company.com
ومع ذلك، فإن اسم FQDN (اسم المجال المؤهل بالكامل) في شهادة خادم الخلفيةbackend.apigee.net
. يظهر لك هذا الخطأ بسبب عدم التطابق.
الدقة
يمكنك حلّ هذه المشكلة باستخدام إحدى الطرق التالية:
FQDN (اسم المجال المؤهل بالكامل) صحيح
تعديل ملف تخزين مفاتيح خادم الخلفية باستخدام اسم FQDN (اسم المجال المؤهل بالكامل) الصحيح وشهادة صالحة وكاملة سلسلة:
- إذا لم تكن لديك شهادة خادم خلفية مع اسم FQDN (اسم المجال المؤهل بالكامل) الصحيح، ثم شراء الشهادة المناسبة من مرجع تصديق (CA) مناسب.
- بمجرد حصولك على سلسلة الشهادات الصالحة والكاملة مع اسم النطاق المؤهل بالكامل خادم الخلفية في ورقة البيانات أو شهادة الكيان المطابقة لاسم المضيف المحددة في نقطة النهاية المستهدفة، حدِّث ملف تخزين مفاتيح الخلفية باستخدام سلسلة شهادات كاملة.
تصحيح خادم الخلفية
عدِّل نقطة النهاية المستهدفة باستخدام اسم المضيف الصحيح لخادم الخلفية:
- إذا تم تحديد اسم المضيف بشكل غير صحيح في نقطة النهاية المستهدفة، يمكنك تحديث نقطة النهاية المستهدفة على اسم المضيف الصحيح الذي يتطابق مع اسم النطاق المؤهل بالكامل في الخلفية شهادة الخادم.
احفظ التغييرات على الخادم الوكيل لواجهة برمجة التطبيقات.
في المثال الذي تمت مناقشته أعلاه، إذا تم إدخال اسم مضيف خادم الخلفية بشكل غير صحيح يمكنك إصلاحها باستخدام 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 Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
لإعادة إظهار الخطأ - ملف تتبُّع يعرض الخطأ
نتيجة الأمر
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- حزم TCP/IP التي تم التقاطها على خادم الخلفية
- إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- تم ملاحظة رسالة الخطأ الكاملة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع يعرض الخطأ
- سجلّات معالج الرسائل
/opt/apigee/var/log/edge-message-processor/logs/system.log
- ناتج الأمر
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- حزم TCP/IP التي تم التقاطها على خادم الخلفية أو معالج الرسائل.
- ناتج يمكنك الحصول على جميع الشهادات لواجهة برمجة تطبيقات ملف تخزين المفاتيح أو Truststore، بالإضافة إلى تفاصيل لكل شهادة يتم الحصول عليها باستخدام يمكنك الحصول على تفاصيل الشهادة من واجهة برمجة تطبيقات ملف تخزين المفاتيح أو Truststore.
المراجع
- شهادة سلسلة الثقة
- الأمر OpenSSL