אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד תגובה של HTTP 502 עם ההודעה Bad Gateway כתגובה לקריאות API ב-Edge Microgateway.
לחלופין, האדמין יקבל שגיאה self signed certificate in certificate
chain כשיפעיל את הפקודה
edgemicro configure.
הודעת שגיאה
הלקוח יראה את הודעת התגובה הבאה:
HTTP/1.1 502 Bad Gateway
שתי דוגמאות נפוצות לתגובות שגיאה:
{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}
לחלופין, השגיאה הזו יכולה להופיע כשמריצים את הפקודה edgemicro configure:
{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }גורמים אפשריים
| סיבה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
|---|---|---|
| שרת היעד מציג אישור בחתימה עצמית | Edge Microgateway יאמת את האישור של שרת היעד, ואם הוא לא מהימן, תופעל שגיאת זמן ריצה. | משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
| שרת הניהול של Apigee Edge משתמש באישור בחתימה עצמית | כשמגדירים את Edge Microgateway בפעם הראשונה, הוא מתחבר ל-Apigee Edge באמצעות TLS כדי לבצע אתחול. אם Edge מציג אישור עם חתימה עצמית, הפעולה תיכשל. | משתמשים ב-Edge Private Cloud |
הסיבה: שרת היעד מציג אישור בחתימה עצמית
אם שרת היעד מציג אישור בחתימה עצמית בחיבור southbound, Edge Microgateway יציג את השגיאה הזו כברירת מחדל כי הוא לא נותן אמון באישורים בחתימה עצמית.
אבחון
יכול להיות שתראו את השגיאה הבאה ביומנים (/var/tmp/edgemicro-`hostname`-
*.log):
2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80- b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate chain][SELF_SIGNED_CERT_IN_CHAIN][]
קוד השגיאה SELF_SIGNED_CERT_IN_CHAIN מציין ש-Edge Microgateway קיבל כנראה אישור בחתימה עצמית משרת היעד. כדי לוודא זאת, מבצעים את השלבים הבאים:
- מריצים את הפקודה
opensslהבאה כדי לאמת את שרשרת האישורים של שרת היעד:echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
-
אם שרשרת האישורים של שרת היעד היא אכן בחתימה עצמית, זו הסיבה לבעיה.
בדוגמה הבאה, אפשר לראות ששרת היעד מציג אישור בחתימה עצמית:
echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority verify error:num=19:self signed certificate in certificate chain verify return:0 DONE
רזולוציה
- צריך לעבוד עם הצוות שאחראי על שרת היעד כדי להשיג אישור TLS מתאים שחתום על ידי רשות אישורים (CA) מהימנה.
אם זה לא אפשרי, אפשר לנסות אחת מהאפשרויות הבאות כדי לאפשר אישורים בחתימה עצמית ב-Edge Microgateway.
אפשרות 1: הגדרת מאפיין מערכת כדי לאפשר ל-Edge Microgateway לתת אמון בכל האישורים
- אם אתם משתמשים ב-Docker, כדאי לעיין במאמר בנושא שימוש ב-CA שלא מהימן על ידי Node.js
אחרת, מייצאים משתנה סביבה בשם
NODE_EXTRA_CA_CERTSשמפנה לקובץ ה-CA הבסיסי.התיעוד הזה מופיע באתר הרשמי של Node.js.
אפשרות 2: הגדרת קובץ ה-YAML של Edge Microgateway כך שיוגדר בו אישור ספציפי לשרת היעד
- מוודאים שיש לכם את האישור (או השרשרת) של שרת היעד בפורמט PEM. כדי להמיר פורמטים אחרים של אישורים ל-PEM, פועלים לפי ההוראות במאמר המרת אישורים לפורמט נתמך.
אם יש שרשרת אישורים, מוודאים שהאישורים מסודרים בסדר הנכון. אישור העלה צריך להיות תמיד ראשון, ואחריו אישור הביניים ואז אישור הבסיס. הסבר נוסף בנושא מופיע במאמר בנושא אימות שרשרת האישורים.
בדוגמה הבאה, הגדרנו את קובץ רשות האישורים המהימנה עבור
untrusted-root.badssl.com.edgemicro: ... targets: - host: 'untrusted-root.badssl.com' ssl: client ca: /opt/apigee/certs/untrusted-root.pem
ההוראות להגדרה מפורטות גם בסרטון Edge Microgateway Module - Configure 1-way and 2-way Southbound TLS. מידע נוסף זמין במאמר הגדרת SSL בשרת Edge Microgateway.
אם הבעיה נמשכת, אפשר לעבור אל איסוף מידע לצורך אבחון.
הגורם: שרת הניהול של Apigee Edge משתמש באישור עם חתימה עצמית
כשמגדירים את Edge Microgateway בפעם הראשונה, אחת מהפקודות שצריך להריץ היא edgemicro configure או edgemicro private configure. הפקודה הזו תאתחל את האשכול ותפנה אל Apigee Edge כדי להוריד את המידע הנדרש.
ב-Edge Private Cloud, כתובת ה-URL של שרת הניהול נקבעת לפי הארגומנט -m.
אם הפעלתם TLS בשרת הניהול, Edge Microgateway ינסה לאמת את האישור שמוצג על ידי שרת הניהול.
דוגמה לפקודה edgemicro configure ל-Edge Private Cloud:
edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443
אם שרת הניהול מוגדר עם אישור בחתימה עצמית, תופיע השגיאה הבאה בפלט של המסוף.
{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }אבחון
- במקרה כזה, יכול להיות ששרת הניהול (
management.apigee-dev.net) מחזיר אישור TLS בחתימה עצמית. - סביר להניח שמנהל המערכת של Apigee Edge סיפק את האישור ויש לו עותק שלו.
- אחרת, מריצים את הפקודה הבאה כדי לקבל מידע על האישור:
echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
- אם לשרת הניהול יש אישור בחתימה עצמית, זו הסיבה לבעיה.
רזולוציה
- צריך לעבוד עם הצוות שאחראי על שרת היעד כדי להשיג אישור TLS מתאים שחתום על ידי רשות אישורים (CA) מהימנה.
אם זה לא אפשרי, צריך לבצע את הפעולות הבאות כדי לאפשר אישורים בחתימה עצמית ב-Edge Microgateway.
- מגדירים מאפיין מערכת כדי לאפשר ל-Edge Microgateway לתת אמון בכל האישורים.
- אם אתם משתמשים ב-Docker, כדאי לעיין במאמר בנושא .
- אחרת, מייצאים משתנה סביבה בשם
NODE_EXTRA_CA_CERTSשמפנה לקובץ ה-CA הבסיסי.המידע הזה מופיע בתיעוד באתר הרשמי של Node.js.
צריך לאסוף פרטי אבחון
אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את פרטי האבחון הבאים ואז לפנות לתמיכה של Apigee Edge:
- קובצי יומן: תיקיית ברירת המחדל היא
/var/tmp, אבל יכול להיות שהיא תוחלף בקובץ הראשיconfig.yaml(logging > dir parameter). מומלץ לשנות אתlog > levelל-infoלפני שמעבירים את קובצי היומן אל צוות התמיכה של Apigee Edge. - קובץ תצורה: התצורה הראשית של Edge Microgateway נמצאת בקובץ ה-YAML בתיקיית ברירת המחדל של Edge Microgateway,
$HOME/.edgemicro. יש קובץ תצורה שמוגדר כברירת מחדל בשםdefault.yaml, ועוד קובץ לכל סביבה בשם ORG-ENV-config.yaml. צריך להעלות את הקובץ הזה במלואו לארגון ולסביבה המושפעים.מסמכים לדוגמה