شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 503 Service Unavailable
با کد خطا messaging.adaptors.http.flow.SslHandshakeFailed
را به عنوان پاسخی برای تماس های API دریافت می کند.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
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 handshake بین پردازشگر پیام Apigee Edge و سرور باطن رخ می دهد:
- اگر فروشگاه اعتماد پردازشگر پیام Apigee Edge:
- شامل یک زنجیره گواهی است که با زنجیره گواهی کامل سرور پشتیبان، OR مطابقت ندارد
- شامل زنجیره گواهی کامل سرور باطن نیست
- اگر زنجیره گواهی ارائه شده توسط سرور باطن:
- حاوی نام دامنه کاملاً واجد شرایط (FQDN) است که با نام میزبان مشخص شده در نقطه پایانی هدف مطابقت ندارد
- حاوی یک زنجیره گواهی نادرست یا ناقص است
دلایل احتمالی این موضوع به شرح زیر است:
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
گواهی یا زنجیره گواهی نادرست/ناقص در انبار اعتماد پردازشگر پیام | گواهی و/یا زنجیره آن که در ذخیرهسازی اعتماد پردازشگر پیام Apigee Edge ذخیره میشود، با زنجیره گواهی سرور باطن مطابقت ندارد یا شامل زنجیره گواهی کامل سرور بکاند نیست. | کاربران Edge Private و Public Cloud |
عدم تطابق FQDN در گواهی سرور باطن و نام میزبان در نقطه پایانی هدف | گواهی ارائه شده توسط سرور باطن حاوی یک FQDN است که با نام میزبان مشخص شده در نقطه پایانی هدف مطابقت ندارد. | کاربران Edge Private و Public Cloud |
گواهینامه یا زنجیره گواهی نادرست/ناقص ارائه شده توسط سرور باطن | زنجیره گواهی ارائه شده توسط سرور باطن یا نادرست یا ناقص است. | کاربران Edge Private و Public Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
روش شماره 1: استفاده از مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
کد خطا را در برابر زمان ترسیم کنید.
سلولی را انتخاب کنید که دارای کد خطای
messaging.adaptors.http.flow.SslHandshakeFailed
است مانند شکل زیر:اطلاعات مربوط به کد خطا
messaging.adaptors.http.flow.SslHandshakeFailed
مطابق شکل زیر نمایش داده می شود:روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- شناسه پیام درخواستی
- کد وضعیت:
503
- منبع خطا:
target
- کد خطا:
messaging.adaptors.http.flow.SslHandshakeFailed
ردیابی
روش شماره 2: با استفاده از ابزار Trace
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی و یکی را فعال کنید
- صبر کنید تا خطای
503 Service Unavailable
با کد خطاmessaging.adaptors.http.flow.SslHandshakeFailed
رخ دهد، یا - اگر میتوانید مشکل را بازتولید کنید، با API تماس بگیرید تا مشکل
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
نشان می دهد که SSL Handshake شکست خورد، همانطور که Apigee Edge پردازشگر پیام نتوانست گواهی سرور پشتیبان را تأیید کند.
- خطا:
- در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
به قسمت Phase Details Error Headers بروید و مقادیر 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 برای تعیین اطلاعات کلیدی در مورد 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-source است:
سرصفحه ها ارزش X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
X-Apigee-fault-source target
گزارشهای پردازشگر پیام
روش شماره 4: استفاده از گزارش های پردازشگر پیام
- شناسه پیام یکی از درخواستهای ناموفق را با استفاده از API Monitoring، Trace tool یا NGINX Access Logs همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
شناسه پیام درخواست خاص را در گزارش پردازشگر پیام جستجو کنید (
/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 Handshake ناموفق است زیرا پردازشگر پیام Apigee Edge قادر به تأیید اعتبار گواهی سرور باطن نیست.
علت: گواهینامه یا زنجیره گواهی نادرست/ناقص در انبار اعتماد پردازشگر پیام
تشخیص
- کد خطا ، منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار ردیابی یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر کد خطا
messaging.adaptors.http.flow.SslHandshakeFailed
است، پیام خطا را با استفاده از یکی از روش های زیر تعیین کنید: - error.cause را با استفاده از ابزار Trace همانطور که در مراحل تشخیص رایج توضیح داده شده است، پیدا کنید
- همانطور که در مراحل تشخیص رایج توضیح داده شده است، استثنا را با استفاده از گزارش های پردازشگر پیام پیدا کنید
- همانطور که در پیام خطا مشاهده می شود،
faultstring
از پاسخ خطا به تماس API خود پیدا کنید - اگر پیام خطا
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
، سپس نشان می دهد که SSL Handshake ناموفق است، به عنوان Apigee پردازشگر پیام Edge نتوانست گواهی سرور باطن را تأیید کند.
شما می توانید این مشکل را در دو مرحله رفع اشکال کنید:
- فاز 1: زنجیره گواهی سرور باطن را تعیین کنید
- فاز 2: زنجیره گواهی ذخیره شده در انبار اعتماد پردازنده پیام را مقایسه کنید
فاز 1
فاز 1: زنجیره گواهی سرور باطن را تعیین کنید
از یکی از روش های زیر برای تعیین زنجیره گواهی سرور backend استفاده کنید:
openssl
دستور openssl
در برابر نام میزبان سرور باطن به صورت زیر اجرا کنید:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
به زنجیره Certificate از خروجی دستور بالا توجه کنید:
نمونه زنجیره گواهی سرور باطن از خروجی فرمان 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
- اگر کاربر Public Cloud هستید، بستههای TCP/IP را در سرور باطن ضبط کنید.
- اگر کاربر Private Cloud هستید، میتوانید بستههای TCP/IP را در سرور پشتیبان یا پردازشگر پیام ضبط کنید. ترجیحاً آنها را در سرور باطن ضبط کنید زیرا بسته ها در سرور باطن رمزگشایی می شوند.
برای گرفتن بسته های TCP/IP از دستور tcpdump زیر استفاده کنید:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
بسته های TCP/IP را با استفاده از ابزار Wireshark یا ابزار مشابهی که با آن آشنایی دارید، تجزیه و تحلیل کنید.
تجزیه و تحلیل نمونه Tcpdump
- بسته شماره 43: پردازشگر پیام (منبع) یک پیام
Client Hello
به سرور باطن (Destination) ارسال کرد. - بسته شماره 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: مقایسه گواهی سرور باطن و گواهی های ذخیره شده در انبار اطمینان پردازشگر پیام
- زنجیره گواهی سرور backend را تعیین کنید .
- با استفاده از مراحل زیر گواهی ذخیره شده در انبار اعتماد پردازنده پیام را تعیین کنید:
نام مرجع 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 UI، Environments > References را انتخاب کنید. به نام موجود در ستون Reference برای مرجع خاص Truststore توجه کنید. این نام فروشگاه اعتماد شما خواهد بود.
در مثال بالا، نام Truststore این است:
myCompanyTrussttoreRef :
myCompanyTruststore
گواهی های ذخیره شده در Truststore (که در مرحله قبل تعیین شد) را با استفاده از API های زیر دریافت کنید:
همه گواهیهای یک فروشگاه کلید یا فروشگاه اعتماد را دریافت کنید . این API تمام گواهیهای موجود در فروشگاه اعتماد خاص را فهرست میکند.
کاربر عمومی ابر:
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 شما تنظیم شده است همانطور که در Obtain an Access OAuth 2.0 توضیح داده شده است.
- گزینه های
curl
مورد استفاده در این مثال در Use curl توضیح داده شده است
خروجی نمونه:
گواهیهای نمونه Truststore
myCompanyTruststore
عبارتند از:[ "serverCert" ]
- جزئیات گواهی را برای گواهی خاص از فروشگاه Keystore یا Truststore دریافت کنید . این API اطلاعات مربوط به یک گواهی خاص را در فروشگاه اعتماد خاص برمی گرداند.
کاربر عمومی ابر:
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 شما تنظیم شده است همانطور که در Obtain an Access OAuth 2.0 توضیح داده شده است.
- گزینه های
curl
مورد استفاده در این مثال در Use 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 با سرور Backend مطابقت دارد.
- گواهی متوسط:
از سرور باطن:
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 با سرور Backend مطابقت دارد.
- گواهی ریشه:
از سرور باطن:
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
به برنامه های سرویس گیرنده برمی گرداند.
- گواهی برگ:
قطعنامه
- اطمینان حاصل کنید که زنجیره گواهینامه مناسب و کامل سرور باطن را دارید.
- اگر کاربر عمومی Cloud هستید، دستورالعملهای موجود در بهروزرسانی گواهی TLS برای Cloud را دنبال کنید تا گواهی را به فروشگاه اعتماد پردازشگر پیام Apigee Edge بهروزرسانی کنید.
- اگر کاربر Private Cloud هستید، دستورالعملهای موجود در بهروزرسانی گواهی TLS برای Private Cloud را دنبال کنید تا گواهی را به فروشگاه اعتماد پردازشگر پیام Apigee Edge بهروزرسانی کنید.
علت: عدم تطابق FQDN در گواهی سرور باطن و نام میزبان در نقطه پایانی هدف
اگر سرور باطن یک زنجیره گواهی ارائه دهد که حاوی 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
.
تشخیص
- نقطه پایانی هدف خاص را در پراکسی API که در آن این خطا را مشاهده می کنید بررسی کنید و نام میزبان سرور باطن را یادداشت کنید:
نمونه 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
backend.company.com
است. FQDN را در گواهی سرور Backend با استفاده از دستور
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
backend.apigee.net
است.- اگر نام میزبان سرور باطن بهدستآمده از مرحله 1 و FQDN بهدستآمده در مرحله 2 مطابقت نداشته باشند، این دلیل خطا است.
- در مثالی که در بالا توضیح داده شد، نام میزبان در نقطه پایانی هدف،
backend.company. com
با این حال، نام FQDN در گواهی سرور backendbackend.apigee. net
. از آنجایی که آنها مطابقت ندارند، این خطا را دریافت می کنید.
قطعنامه
با استفاده از یکی از روش های زیر می توانید این مشکل را برطرف کنید:
FQDN صحیح
فروشگاه کلید سرور باطن را با FQDN صحیح، زنجیره گواهی معتبر و کامل به روز کنید:
- اگر گواهی سرور پشتیبان با FQDN صحیح ندارید، گواهی مناسب را از یک CA (مرجع صدور گواهی) مناسب تهیه کنید.
تأیید کنید که یک زنجیره گواهی سرور باطن معتبر و کامل دارید .
- هنگامی که زنجیره گواهی معتبر و کامل با FQDN صحیح سرور باطن را در برگه یا گواهی موجودیت که با نام میزبان مشخص شده در نقطه پایانی هدف یکسان است، دارید ، فروشگاه کلید backend را با زنجیره گواهی کامل به روز کنید.
سرور باطن صحیح
نقطه پایانی هدف را با نام میزبان سرور باطن صحیح به روز کنید:
- اگر نام میزبان به اشتباه در نقطه پایانی هدف مشخص شده است، سپس نقطه پایانی هدف را بهروزرسانی کنید تا نام میزبان صحیحی داشته باشد که با FQDN در گواهی سرور باطن مطابقت داشته باشد.
تغییرات را در پروکسی API ذخیره کنید.
در مثالی که در بالا توضیح داده شد، اگر نام میزبان سرور باطن به اشتباه مشخص شده باشد، میتوانید با استفاده از 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
از خروجی دستور بالا توجه کنید.نمونه زنجیره گواهی سرور باطن را از خروجی فرمان 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 - بررسی کنید که زنجیره گواهی مناسب و کامل را همانطور که در زنجیره گواهی اعتبار سنجی توضیح داده شده است.
اگر زنجیره گواهی معتبر و کاملی برای سرور باطن ندارید، دلیل این مشکل همین است.
در زنجیره گواهی سرور باطن نمونه نشان داده شده در بالا، گواهی ریشه وجود ندارد. بنابراین، شما این خطا را دریافت می کنید.
قطعنامه
فروشگاه کلید سرور باطن را با زنجیره گواهی معتبر و کامل به روز کنید:
تأیید کنید که یک زنجیره گواهی سرور باطن معتبر و کامل دارید .
- زنجیره گواهی معتبر و کامل را در فروشگاه کلید سرور پشتیبان بهروزرسانی کنید.
اگر مشکل همچنان ادامه داشت، به اطلاعات تشخیصی باید جمعآوری شود بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و با پشتیبانی Apigee Edge تماس بگیرید:
- اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- برای بازتولید خطا، دستور
curl
کامل کنید - فایل ردیابی خطا را نشان می دهد
خروجی دستور
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_#
- بسته های TCP/IP که در سرور باطن ضبط شده اند
- اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیغام خطای کامل مشاهده شد
- بسته پروکسی API
- فایل ردیابی خطا را نشان می دهد
- گزارشهای پردازشگر پیام
/opt/apigee/var/log/edge-message-processor/logs/system.log
- خروجی دستور
openssl
:
openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_#
- بسته های TCP/IP که در سرور باطن یا پردازشگر پیام ضبط شده اند.
- خروجی دریافت همه گواهیها برای یک API فروشگاه کلید یا Truststore و همچنین جزئیات هر گواهی که با استفاده از Get Cert Details از یک Keystore یا Truststore API به دست آمده است.
مراجع
- زنجیره اعتماد گواهی
- دستور OpenSSL