502 שער שגוי - אישור בחתימה עצמית בשרשרת

מוצג המסמך של 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 בענן הציבורי והפרטי
בשרת הניהול של Apigee Edge משתמשים באישור בחתימה עצמית כשמגדירים את Edge Microgateway בפעם הראשונה, הוא יתחבר ל-Apigee Edge באמצעות TLS ל-אתחול. אם Edge יציג אישור עם חתימה עצמית, הפעולה תיכשל. משתמשי Edge בענן פרטי

הסיבה: שרת היעד מציג אישור עם חתימה עצמית

אם אישור בחתימה עצמית מוצג על ידי שרת היעד לכיוון דרום, ואז 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 שקיבל אישור עם חתימה עצמית משרת היעד. כדי לוודא זאת, צריך לבצע את השלבים הבאים:

  1. מריצים את פקודת openssl הבאה כדי לאמת את היכולות של שרת היעד שרשרת אישורים:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. אם שרשרת האישורים של שרת היעד אכן חתומה עצמית, זו הסיבה הבעיה.

    בדוגמה הבאה, שימו לב ששרת היעד מציג אישור עם חתימה עצמית:

    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
    

רזולוציה

  1. לעבוד עם הצוות שבבעלותו שרת היעד כדי להשיג אישור TLS מתאים חתום על ידי רשות אישורים (CA) מהימנה.
  2. אם זה לא אפשרי, אפשר לשקול אחת מהאפשרויות הבאות כדי לאפשר חתימה עצמית אישורים ב-Edge Microgateway.

    אפשרות מס' 1: הגדרת מאפיין מערכת כדי לאפשר ל-Edge Microgateway לתת אמון בכולם אישורים

    1. אם משתמשים ב-Docker, יש לעיין ב שימוש ב-CA שלא מהימן על ידי Node.js
    2. אחרת, מייצאים משתנה סביבה בשם NODE_EXTRA_CA_CERTS, שמצביע על קובץ ה-CA ברמה הבסיסית.

      זה מתועד בערוץ הרשמי Node.js האתר.

    אפשרות 2: להגדיר את קובץ התצורה YAML של Edge Microgateway כדי לתת אמון האישור של שרת היעד הזה

    1. חשוב לוודא שיש לכם את האישור (או שרשרת) של שרת היעד בפורמט PEM. שפת תרגום להמיר פורמטים אחרים של אישורים ל-PEM, פועלים לפי ההוראות המרת האישורים לפורמט נתמך.
    2. אם יש שרשרת אישורים, צריך לוודא שהאישורים נכונים הזמנה. אישור העלה צריך להיות ראשון תמיד, ואחריו שלב הביניים ואז את אישור הבסיס. יש הסבר נוסף בנושא מתבצע אימות של שרשרת האישורים.

      בדוגמה הבאה הגדרנו את קובץ ה-CA המהימן עבור untrusted-root.badssl.com

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    ההוראות להגדרה של ההגדרות האלה מפורטות גם Edge Microgateway Module – הגדרת סרטון TLS חד-כיווני ודו-כיווני של 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:

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' }

אבחון

  1. במקרה הזה, שרת הניהול (management.apigee-dev.net) עשוי להחזיר אישור TLS עם חתימה עצמית.
  2. סביר להניח שהאדמין של Apigee Edge סיפק את האישור ויש עותק שלו.
  3. אם לא, מריצים את הפקודה הבאה כדי לקבל מידע על האישור:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. אם לשרת הניהול יש אישור בחתימה עצמית, זו הסיבה לכך בעיה.

רזולוציה

  1. לעבוד עם הצוות שבבעלותו שרת היעד כדי להשיג אישור TLS מתאים חתום על ידי רשות אישורים (CA) מהימנה.
  2. אם זה לא אפשרי, צריך לבצע את הפעולות הבאות כדי לאפשר חתימה עצמית אישורים ב-Edge Microgateway.

  3. כדי לאפשר ל-Edge Microgateway לתת אמון בכל האישורים, צריך להגדיר מאפיין מערכת.
  4. אם משתמשים ב-Docker, יש לעיין ב שימוש ב-CA שלא מהימן על ידי Node.js.
  5. אחרת, מייצאים משתנה סביבה בשם 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. העלאת הקובץ הזה באופן מלא בארגון ובסביבה שהושפעו

    מסמכי עזר

    איך מגדירים שממשק המשתמש של Edge ישתמש ב-TLS כדי לגשת ל-Edge API