מוצג המסמך של 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 בין מעבד ההודעות של Apigee Edge לבין שרת הקצה העורפי:
- אם ה-truststore של מעבד ההודעות של Apigee Edge:
- מכילה שרשרת אישורים שלא תואמת לשלמותה של שרת הקצה העורפי שרשרת האישורים, או
- לא מכיל את שרשרת האישורים המלאה של שרת הקצה העורפי
- אם שרשרת האישורים מוצגת על ידי שרת הקצה העורפי:
- מכיל שם דומיין כשיר מלא (FQDN) שאינו תואם לשם המארח שצוין ב נקודת הקצה כיעד
- מכיל שרשרת אישורים שגויה או חלקית
הסיבות האפשריות לבעיה זו הן:
סיבה | תיאור | הוראות לפתרון בעיות עבור |
---|---|---|
אישור שגוי/לא שלם או שרשרת אישורים במאגר האמון של מעבד ההודעות | האישור ו/או השרשרת שלו שמאוחסנים במאגר האמון של מעבד ההודעות של Apigee Edge לא תואמים לשרשרת האישורים של שרת הקצה העורפי או לא מכילים את שרשרת האישורים המלאה של שרת הקצה העורפי. | משתמשי Edge בענן פרטי וציבורי |
חוסר התאמה בין FQDN לבין האישור של שרת הקצה העורפי לבין שם המארח בנקודת הקצה של היעד | האישור שמוצג על ידי שרת הקצה העורפי מכיל FQDN שלא תואם לשם המארח שצוין בנקודת הקצה (endpoint) של היעד. | משתמשי Edge בענן פרטי וציבורי |
אישור או שרשרת אישורים שגויים/לא מלאים מוצגים על ידי שרת הקצה העורפי | שרשרת האישורים שמוצגת על ידי שרת הקצה העורפי שגויה או חלקית. | משתמשי Edge בענן פרטי וציבורי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
הליך מס' 1: שימוש במעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד השגיאה
messaging.adaptors.http.flow.SslHandshakeFailed
כפי שמוצג למטה:מידע על קוד התקלה
messaging.adaptors.http.flow.SslHandshakeFailed
מוצג בתור מוצגת למטה:לוחצים על צפייה ביומנים ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון יומנים שימו לב לפרטים הבאים:
- מזהה ההודעה של הבקשה
- קוד סטטוס:
503
- מקור התקלה:
target
- קוד התקלה:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
הליך מס' 2: שימוש בכלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- להפעיל את סשן המעקב ואז
- צריך להמתין לשגיאה
503 Service Unavailable
עם קוד השגיאהmessaging.adaptors.http.flow.SslHandshakeFailed
יתרחשה, או - אם הצלחתם לשחזר את הבעיה, יש לבצע את הקריאה ל-API כדי לשחזר את הבעיה
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 (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
גוללים למטה לקטע 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:
- אם אתם משתמשים של ענן פרטי, אתם יכולים להשתמש ביומני הגישה ל-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, כלי המעקב, או יומני גישה ל-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 לא ניתן לאמת את האישור של שרת הקצה העורפי.
הסיבה: אישור או שרשרת אישורים שגויים/לא מלאים במאגר האמון של מעבד ההודעות
אבחון
- מגדירים את קוד השגיאה, מקור התקלה של השגיאה שזוהתה באמצעות ה-API יומני גישה של Monitoring, כלי מעקב או NGINX, כפי שמוסבר במאמר Common שלבי האבחון.
- אם קוד השגיאה הוא
messaging.adaptors.http.flow.SslHandshakeFailed
, אז לקבוע מהי הודעת השגיאה באחת מהשיטות הבאות: - מוצאים את error.cause באמצעות כלי המעקב כמו שמוסבר ב שלבי אבחון נפוצים
- מוצאים את החריגה באמצעות יומני מעבד ההודעות, כמו שמוסבר ב שלבי האבחון הנפוצים
- מאתרים את ה-
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 הפעולה נכשלה, כי מעבד ההודעות של 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
- אם אתם משתמשים בענן ציבורי, עליכם לתעד את חבילות ה-TCP/IP שרת עורפי.
- אם אתם משתמשים בענן פרטי, תוכלו לתעד את ה-TCP/IP חבילות בשרת הקצה העורפי או במעבד ההודעות. עדיף לצלם אותם שרת הקצה העורפי בזמן שהמנות מפוענחות בשרת הקצה העורפי.
צריך להשתמש בהגדרות הבאות פקודת tcpdump כדי לתעד חבילות TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
לנתח את מנות ה-TCP/IP באמצעות Wireshark Tool או כלי דומה שאתם מכירים.
ניתוח לדוגמה של 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 של מעבד ההודעות באמצעות
את השלבים הבאים:
קבלת שם ההפניה ל-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, בוחרים באפשרות Environments > (סביבה) > קובצי עזר. חשוב לזכור את השם העמודה הפניה לקובץ העזר הספציפי של ה-Truststore. זה יהיה השם של ה-Truststore.
בדוגמה שלמעלה שם ה-Truststore הוא:
myCompanyTruststoreRef:
myCompanyTruststore
קבלת האישורים שמאוחסנים ב-Truststore (כפי שנקבע בשלב הקודם) באמצעות ממשקי ה-API הבאים:
קבלת כל האישורים של מאגר מפתחות או מאגר אמון. ב-API הזה מפורטים כל אישורים במאגר האמון הספציפי.
משתמש ב-Public 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"
משתמש בענן פרטי:
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" ]
-
קבלת פרטי אישור של האישור הספציפי מ-Keystore או Truststore.
ה-API הזה מחזיר מידע על אישור ספציפי
ב-Truststore.
משתמש ב-Public 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"
משתמש בענן פרטי
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
ממאגר ה-Trust של מעבד ההודעות (הלקוח):
"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
ממאגר ה-Trust של מעבד ההודעות (הלקוח):
"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
האישור הבסיסי (root) חסר לחלוטין ב-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
ללקוח תרגום מכונה.
- אישור עלים:
רזולוציה
- צריך לוודא שיש לכם שרשרת אישורים תקינה ומלאה של שרת הקצה העורפי.
- אם אתם משתמשים ב-Public Cloud, עליכם לפעול לפי ההוראות הבאות עדכון אישור TLS ל-Cloud כדי לעדכן את האישור לגרסה של Apigee Edge מעבד הודעות Truststore.
- אם אתם משתמשים ב-Private Cloud, פעלו לפי ההוראות ב מעדכנים אישור TLS לענן הפרטי כדי לעדכן את האישור כך: מאגר האמינות של מעבד ההודעות של Apigee Edge.
הסיבה: חוסר התאמה בין FQDN לבין האישור של שרת הקצה העורפי לבין שם המארח בנקודת הקצה של היעד
אם שרת הקצה העורפי מציג שרשרת אישורים שמכילה FQDN, שלא תואם ל
שם המארח שמצוין בנקודת הקצה (endpoint) של היעד, ואז Apigee Edge's Message Process מחזיר את השגיאה
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
אבחון
- לבדוק את נקודת הקצה הספציפית בשרת ה-proxy ל-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.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 וקיבלתם FQDN שלב שני לא תואמים, אז זו הסיבה לשגיאה.
- בדוגמה שלמעלה, שם המארח בנקודת הקצה של היעד הוא
backend.company.com
עם זאת, שם ה-FQDN באישור של שרת הקצה העורפיbackend.apigee.net
. מכיוון שהם לא תואמים, השגיאה הזו תוצג.
רזולוציה
אפשר לפתור את הבעיה באחת מהשיטות הבאות:
FQDN נכון
עדכון מאגר המפתחות של שרת הקצה העורפי עם FQDN נכון, אישור תקין ומלא שרשרת:
- אם אין לך אישור של שרת עורפי עם ה-FQDN הנכון, להשיג את האישור המתאים מרשות אישורים מתאימה.
מוודאים שיש לכם שרשרת האישורים של שרת הקצה העורפי תקינה ומלא.
- כשיש לך שרשרת אישורים תקינה ומלאה עם ה-FQDN הנכון של שרת עורפי באישור הישות או העלה הזהה לשם המארח שצוין בנקודת הקצה (endpoint) של היעד, מעדכנים את מאגר המפתחות של הקצה העורפי עם להשלים את שרשרת האישורים.
שרת עורפי נכון
מעדכנים את נקודת הקצה כיעד בשם המארח הנכון של שרת הקצה העורפי:
- אם שם המארח צוין באופן שגוי בנקודת הקצה של היעד, יש לעדכן את שנקודת הקצה כיעד תהיה בעלת שם המארח הנכון שתואם ל-FQDN אישור השרת.
שומרים את השינויים שבוצעו בשרת ה-proxy של ה-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
מהפלט של הפקודה שלמעלה.דוגמה לשרשרת אישורים של שרת עורפי מפלט פקודת 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 - צריך לוודא שיש לכם שרשרת אישורים תקינה ומלאה, כפי שמוסבר ב אימות שרשרת האישורים.
אם אין לכם שרשרת אישורים תקינה ומלאה עבור שרת הקצה העורפי, זו הסיבה לבעיה.
בשרשרת האישורים של שרת הקצה העורפי לדוגמה שמוצגת למעלה, האישור הבסיסי (root) הוא חסר. לכן מופיעה השגיאה הזו.
רזולוציה
עדכון מאגר המפתחות של שרת הקצה העורפי עם שרשרת אישורים חוקית ומלאה:
- מעדכנים את שרשרת האישורים החוקית והמלאה במאגר המפתחות של שרת הקצה העורפי.
אם הבעיה עדיין נמשכת, עוברים אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אם הבעיה נמשכת גם לאחר ביצוע ההוראות שלמעלה, יש לאסוף את הפריטים הבאים פרטי אבחון ויוצרים קשר עם התמיכה ב-Apigee Edge:
- אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- כדי לשחזר את השגיאה, צריך להשלים את הפקודה
curl
- קובץ המעקב שמציג את השגיאה
הפלט של הפקודה
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- מנות TCP/IP שתועדו בשרת הקצה העורפי
- אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- זוהתה הודעת שגיאה מלאה
- חבילת proxy ל-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 וגם את הפרטים של כל אישור שמתקבל באמצעות קבלת פרטי אישור מ-Keystore או מ-Truststore API.