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, כדאי לעיין במאמר שימוש ברשות אישורים שאינה מהימנה על ידי 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 (אבטחת שכבת התעבורה) חד-כיוונית ודו-כיוונית. למידע נוסף, אפשר לקרוא את המאמר הגדרת SSL בשרת Edge Microgateway.

אם הבעיה נמשכת, כדאי לעיין במאמר נדרש איסוף של פרטי אבחון.

הסיבה: Apigee Edge Management Server משתמש באישור בחתימה עצמית

כש-Edge Microgateway מוגדר בפעם הראשונה, אחת מהפקודות שצריך להריץ היא edgemicro configure או edgemicro private configure. פקודה זו תאתחל את האשכול ותיצור קשר עם Apigee Edge כדי להוריד את המידע הנדרש.

בענן הפרטי של Edge, כתובת ה-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, כדאי לעיין במאמר שימוש ברשות אישורים שאינה מהימנה על ידי 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