הגדרת SNI בין מעבד ההודעות של הקצה לבין שרת הקצה העורפי

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

התכונה Server Name Indication (SNI) מאפשרת להציג כמה שרתי קצה עורפיים של HTTPS מאותה כתובת IP ומאותה יציאה, בלי לדרוש מהשרתים האלה להשתמש באותו אישור TLS. זהו תוסף לפרוטוקול TLS. כש-SNI מופעל בלקוח, הלקוח מעביר את שם המארח של שרת הקצה העורפי כחלק מהלחיצת יד הראשונית של TLS. ההגדרה הזו מאפשרת לשרת TLS לקבוע באיזה אישור TLS צריך להשתמש כדי לאמת את הבקשה מהלקוח.

כברירת מחדל, SNI מושבת ברכיב מעבד בקשות ב-Edge for the Private Cloud כדי להבטיח תאימות לאחור עם שרתי הקצה העורפי הקיימים. אם שרת ה-Backend שלכם מוגדר לתמיכה ב-SNI, אתם צריכים להפעיל את ה-SNI ברכיב מעבד בקשות. אחרת, בקשות ה-API שעוברות דרך Apigee Edge ייכשלו עם שגיאות בלחיצת היד של TLS.

במאמר הזה נסביר איך:

לפני שמתחילים

זיהוי של שרת עם SNI מופעל

בקטע הזה מוסבר איך לזהות אם שרת בק-אנד מופעל באמצעות SNI.

  1. מריצים את הפקודה openssl ומנסים להתחבר לשם המארח הרלוונטי של השרת (נתב Edge או שרת עורפי) בלי להעביר את שם השרת, כמו שמוצג בהמשך:
    openssl s_client -connect hostname:port
  2. יכול להיות שתקבלו את האישורים, ולפעמים תראו שהלחיצת יד נכשלה בפקודה openssl, כמו שמוצג בהמשך:
    CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
  3. מריצים את הפקודה openssl ומנסים להתחבר לשם המארח הרלוונטי של השרת (נתב Edge או שרת backend) על ידי העברת שם השרת כמו שמוצג בהמשך:
    openssl s_client -connect hostname:port -servername hostname
  4. אם מתקבלת שגיאת לחיצת יד בשלב 1 או אם מתקבלים אישורים שונים בשלב 1 ובשלב 2, המשמעות היא שהשרת שצוין מוגדר עם SNI.
  5. אם רוצים לאמת את זה ביותר משרת קצה עורפי אחד, צריך לחזור על השלבים שלמעלה לכל שרת קצה עורפי.

אם אתם מגלים שיש לכם שרת קצה עורפי אחד או יותר שמופעל בו SNI, אתם צריכים להפעיל SNI ברכיב Message Processor (מעבד ההודעות) כמו שמוסבר בהמשך. אחרת, בקשות ה-API שעוברות דרך Apigee Edge ייכשלו עם TLS Handshake Failures.

הפעלת SNI בין מעבדי הודעות של Edge לבין שרת קצה עורפי

בקטע הזה מוסבר איך להפעיל SNI בין מעבד ההודעות של Edge לבין שרת הקצה העורפי. אפשר להפעיל את SNI דרך המאפיין jsse.enableSNIExtension ברכיב מעבד בקשות. כדי להגדיר מאפיין כלשהו ב-מעבד בקשות, משתמשים בטוקן בהתאם לתחביר שמתואר במאמר איך מגדירים את Edge.

כדי להפעיל SNI במעבדי ההודעות, מבצעים את השלבים הבאים:

  1. איתור הטוקן של המאפיין jsse.enableSNIExtension
  2. הפעלת SNI במעבד ההודעות

איתור הטוקן של הנכס jsse.enableSNIExtension

כדי לאתר את האסימון של הנכס jsse.enableSNIExtension:

  1. מחפשים את המאפיין jsse.enableSNIExtension בספריית המקור של Message Processor‏ /opt/apigee/edge-message-processor/source באמצעות הפקודה הבאה:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/source
  2. הפלט של הפקודה הזו מציג את האסימון של המאפיין jsse.enableSNIExtension של מעבד ההודעות, באופן הבא:
    /opt/apigee/edge-message-processor/source/conf/system.properties:jsse.enableSNIExtension={T}conf_system_jsse.enableSNIExtension{/T}

    כאשר המחרוזת שבין התגים {T}{/T} היא שם האסימון שאפשר להגדיר בקובץ .properties של Message Processor.

    לכן, האסימון של המאפיין jsse.enableSNIExtension הוא:

    conf_system_jsse.enableSNIExtension

הפעלת SNI במעבד ההודעות

בשלבים הבאים מוסבר איך להפעיל SNI ברכיב Apigee מעבד בקשות.

  1. במחשב של מעבד ההודעות, פותחים את הקובץ הבא בכלי לעריכה. אם היא לא קיימת, צריך ליצור אותה.
    /opt/apigee/customer/application/message-processor.properties

    לדוגמה, כדי לפתוח את הקובץ באמצעות vi, מזינים את הפקודה הבאה:

    vi /opt/apigee/customer/application/message-processor.properties
  2. מוסיפים לקובץ המאפיינים שורה בפורמט הבא:
    conf_system_jsse.enableSNIExtension=true
  3. שומרים את השינויים.
  4. מוודאים שקובץ המאפיינים הזה נמצא בבעלות המשתמש apigee, כמו שמוצג בהמשך:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. מפעילים מחדש את מעבד ההודעות כמו שמוצג בהמשך:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. מוודאים שהגדרות ה-SNI עודכנו ב-Message Processor.
  7. אם יש לכם יותר ממעבד הודעות אחד, צריך לחזור על השלבים שלמעלה בכל מעבדי ההודעות.

השבתת SNI בין מעבדי הודעות של Edge לבין שרת backend

בדרך כלל לא אמורות להיות בעיות אחרי הפעלת SNI. עם זאת, אם נתקלתם בבעיות בקישוריות בין Edge מעבד בקשות לבין שרת הקצה העורפי אחרי הפעלת SNI, תמיד תוכלו להשבית את SNI באמצעות השלבים הבאים.

אפשר להשבית את SNI על ידי שינוי הערך של המאפיין jsse.enableSNIExtension בחזרה ל-false ברכיב מעבד בקשות.

השבתת SNI במעבדי ההודעות

בשלבים הבאים מוסבר איך להשבית את SNI במעבדי ההודעות של Apigee.

  1. במחשב של מעבד ההודעות, פותחים את הקובץ הבא בכלי לעריכה. אם היא לא קיימת, צריך ליצור אותה.
    /opt/apigee/customer/application/message-processor.properties

    לדוגמה, כדי לפתוח את הקובץ באמצעות vi, מזינים את הפקודה הבאה:

    vi /opt/apigee/customer/application/message-processor.properties
  2. אם השורה conf_system_jsse.enableSNIExtension=true קיימת בקובץ /opt/apigee/customer/application/message-processor.properties, משנים אותה באופן הבא:
    conf_system_jsse.enableSNIExtension=false
  3. שומרים את השינויים.
  4. מוודאים שקובץ המאפיינים הזה נמצא בבעלות המשתמש apigee, כמו שמוצג בהמשך:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. מפעילים מחדש את מעבד ההודעות כמו שמוצג בהמשך:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. מוודאים שהגדרות ה-SNI עודכנו ב-Message Processor.
  7. אם יש לכם יותר ממעבד הודעות אחד, חוזרים על השלבים שלמעלה בכל מעבדי ההודעות.

אימות הגדרת SNI במעבדי ההודעות

בקטע הזה מוסבר איך לוודא שההגדרה של SNI עודכנה בהצלחה במעבדי ההודעות.

למרות שמשתמשים באסימון conf_system_jsse.enableSNIExtension כדי להגדיר SNI במעבד ההודעות, צריך לוודא שהמאפיין בפועל jsse.enableSNIExtension הוגדר עם הערך החדש.

  1. במחשב של מעבד ההודעות, מחפשים את המאפיין jsse.enableSNIExtension בספרייה /opt/apigee/edge-message-processor/conf ובודקים אם הוא הוגדר עם הערך החדש כמו שמוצג בהמשך:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/conf
  2. אם התצורה של SNI מתעדכנת בהצלחה במעבד ההודעות, הפקודה שלמעלה מציגה את הערך החדש בקובץ system.properties.

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

    /opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=true

    באופן דומה, התוצאה לדוגמה מהפקודה שלמעלה אחרי השבתת SNI במעבד ההודעות היא:

    /opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=false

    בדוגמה של הפלט שלמעלה, שימו לב שהמאפיין jsse.enableSNIExtension עודכן לערך החדש true או false ב-system.properties. המשמעות היא ש-SNI הופעל או הושבת בהצלחה במעבד ההודעות.

  3. אם עדיין מוצג הערך הישן של הנכס jsse.enableSNIExtension, צריך לוודא שביצעתם את כל השלבים שמפורטים בקטע המתאים כדי להפעיל או להשבית את SNI בצורה נכונה. אם פספסתם שלב כלשהו, צריך לחזור על כל השלבים בצורה נכונה.
  4. אם עדיין אין לך אפשרות להפעיל או להשבית את SNI , אפשר ליצור קשר עם התמיכה של Apigee Edge.