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

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

      בדוגמה הבאה, הגדרנו את קובץ רשות האישורים המהימנה עבור 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' }

אבחון

  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, כדאי לעיין במאמר בנושא .
  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