שימוש ב-TLS בפורטל

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

תוכלו להגדיר שהפורטל ישתמש ב-TLS. תהליך ההגדרה של TLS לפורטל תלוי באופן שבו פרסתם את הפורטל:

  • ענן: הגדרת TLS מ-Pantheon או Acquia, המארח מבוסס-הענן עבור הפורטל.
  • Apigee Edge לענן פרטי: הגדרה של TLS באופן מקומי בשרת שמארח את הפורטל.

TLS והפורטל

בתמונה הבאה מוצגים שני המקומות שבהם הפורטל משתמש ב-TLS:

  1. לתקשורת בין הפורטל ל-Edge management API.

    הפורטל לא פועל כמערכת עצמאית. במקום זאת, רוב המידע משמש הפורטל מאוחסן בפועל ב-Edge, ואפשר לפרוס אותו בענן או בארגון בתור התקנה של ענן פרטי. במקרה הצורך, הפורטל יוצר HTTP או HTTPS בקשה ל-Edge management API כדי לאחזר מידע או לשלוח מידע.

    כשיוצרים את הפורטל, אחד השלבים הראשונים שצריך לבצע הוא לציין את כתובת ה-URL של ו-Edge management API. כתובת ה-URL הזו תלויה באופן שבו הוגדר ממשק Edge management API יכולים להשתמש ב-TLS. ראו יצירה או פורטל מפתחים.
  2. לתקשורת בין מפתחים לפורטל.

    כשמשתמשים בפורטל השירותים למפתחים כדי לפרוס את ממשקי ה-API, המפתחים מתחברים אל פורטל לרישום אפליקציות ולקבלת מפתחות API. פרטי הכניסה ומפתח ה-API מידע קנייני שאתם רוצים לשלוח באמצעות HTTPS כדי להבטיח את אבטחתם. הזה של מידע קנייני, יש לשלוח באמצעות HTTPS.

    אופן ההגדרה של TLS לתרחיש הזה תלוי באופן שבו פרסתם את ה-TLS (אבטחת שכבת התעבורה) פורטל: ענן או Apigee Edge לענן פרטי. בקטעים הבאים מתוארים בשני התרחישים.

הגדרת TLS בין הפורטל ו-Edge management API

התצורה של Edge management API קובעת אם התקשורת תוכל להשתמש TLS (אבטחת שכבת התעבורה). אם ב-Edge management API הוגדר שימוש ב-TLS, הפורטל יכול להשתמש ב-HTTPS. אחרת, הפורטל מתקשר עם Edge באמצעות HTTP. לכן, כמפתחי פורטל, הם צריכים לדעת רק איך Edge מוגדר כדי להגדיר את החיבור בין הפורטל קצה.

במאמר שבו משתמשים כדי להגדיר את החיבור ל-Edge management API: יצירת מפתח .

גרסה מבוססת-ענן של Edge

אם הפורטל מתחבר לגרסה מבוססת-הענן של Edge, אז כתובת ה-URL של ה-Edge ממשק ה-API לניהול מוגדר מראש על ידי Apigee לשימוש ב-TLS. במהלך הגדרת הפורטל, יש לך גישה אל ממשק ה-API של ניהול Edge באמצעות כתובת ה-URL https://api.enterprise.apigee.com/v1.

התקנת Edge בענן הפרטי

בהתקנה של ענן פרטי של Edge, כתובת ה-URL של Edge management API נמצאת טופס:
http://EdgePrivateCloudIp:8080/v1
או:
https://EdgePrivateCloudIp:TLSport/v1

כאשר EdgePrivateCloudIp היא כתובת ה-IP של ממשק Edge Management. שרת השרת ו-TLSport היא יציאת ה-TLS של Edge management API. לדוגמה, לפי ההגדרות של Edge, מספר היציאה יכול להיות 8443 או אפילו 8080.

להגדיר TLS בין מפתחים לבין פורטל

הדרך שבה מגדירים TLS בין מפתחים לפורטל תלויה באופן שבו פרסתם את ה-TLS. פורטל: ענן או Apigee Edge לענן פרטי.

פורטלים מבוססי-ענן

פנתיאון

הפנתיאון מספק HTTPS אוטומטי בחינם לכל האתרים בפלטפורמה שלו דרך Pantheon Global CDN באמצעות Let's Encrypt. ראו גם HTTPS ב-Global CDN של הפנתיאון.

Acquia

כדי להפעיל TLS/SSL באמצעות Acquia, עיינו במאמר הפעלת SSL.

Edge לפרטי פורטלים בענן

כל ההתקנות המומלצות של הפורטל בענן הפרטי ב-Apigee מחייבות את הפורטל מאחורי מאזן עומסים, כפי שמוצג בהמשך:

לכן, בהתקנות בארגון, יש שתי אפשרויות להגדרת TLS:

  • הגדרת TLS במאזן העומסים: הגדרת TLS במאזן העומסים עצמו, ולא בפורטל. לכן, התהליך שבו משתמשים כדי להגדיר TLS הוא תלוי במאזן העומסים. מידע נוסף זמין במסמכי התיעוד של מאזן העומסים מידע.
  • הגדרה של TLS בפורטל עצמו: במקרה הצורך, אפשר להגדיר TLS: שרת האינטרנט שמארח את הפורטל. מידע נוסף זמין בקטע הגדרת הפורטל לשימוש HTTPS לקבלת מידע נוסף.

כדי לפרוס את הפורטל בסביבת ייצור, צריך לקבל אישור TLS משלכם. הסביבה.

מתבצעת הגדרה הגדרות TLS נוספות

אפשר לערוך את הקוד sites/default/settings.local.php (ענן) או sites/default/settings.php (פרטי Cloud) כדי לבצע שינויים בהגדרות של TLS עבור הפורטל.

כשעורכים את הקובץ, מוסיפים מופעים של הפונקציה ini_set() כדי להגדיר מאפיין. מידע נוסף על הפונקציה הזו זמין בכתובת http://php.net/manual/en/function.ini-set.php.

אפשר להגדיר את המאפיינים הבאים ב-sites/default/settings.local.php (ענן) או sites/default/settings.php (פרטי :

  • cookie_httponly: (מומלץ) מציין שקובץ ה-cookie נגיש רק דרך פרוטוקול HTTP. הגדרה נכס בתור:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (אופציונלי) מציין שניתן לשלוח קובצי cookie רק דרך חיבורים מאובטחים. אבל פירושו שכל התוכן חייב להיות מוצג באמצעות HTTPS. אם ההגדרה הזו מופעלת, האתר לא פועלים באמצעות HTTP. הגדרת הנכס הזה בתור:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime ו-cookie_lifetime: (אופציונלי) gc_lifeteime מציין את מספר השניות שאחריהן ניתן יהיה לנקות את הנתונים, וגם הערך cookie_lifetime מציין משך החיים של קובץ ה-cookie בשניות. הגדרת המאפיינים האלה בתור:

    ini_set('session.gc_maxlifetime', 3600);
    ini_set('session.cookie_lifetime', 3600);

למידע נוסף על הגדרת TLS בין פורטל המפתחים לבין לקוחות, ראו הפעלת SSL לתקשורת מאובטחת עם HTTPS באתר המסמך של Pantheon.

מתבצעת הגדרה TLS עם מאזני עומסים

כדי לשפר את הביצועים, מאזני עומסים מוגדרים לפעמים כך שיבצעו סיום TLS. עם סיום TLS, מאזני עומסים מפענחים הודעות שנשלחות דרך https:// ומעבירים את ההודעות לקצה העורפי שרתים ב-http://. זה שומר משרתים את הקצה העורפי התקורה של פענוח הודעות https:// בעצמם.

אם מאזני עומסים מעבירים הודעות http לא מוצפנות לשרתים באותו מרכז נתונים, אין בעיה. אבל אם מאזני עומסים מעבירים הודעות ב-http:// לשרתים מחוץ לנתונים למשל, פורטל המפתחים של Apigee, ההודעות לא מוצפנות, ואז פותח חור באבטחה.

אם פורטל המפתחים נמצא מאחורי מאזני עומסים שמשתמשים בסיום TLS, אם רוצים שכל התנועה תוצג מעל https://, דפי האתר יצטרכו מכילים רק קישורי https:// ויהיה עליך להוסיף את הקוד הבא לפורטל המפתחים שלך, sites/default/settings.local.php (ענן) או sites/default/settings.php (פרטי Google Cloud). כי מאזן העומסים לא משנה באופן אוטומטי את התוכן של דפי HTML, הקוד מבטיח שכל הקישורים שמועברים ללקוח יתחילו ב-https://.

כדי להגדיר TLS עם מאזני עומסים, צריך להוסיף את השורות הבאות ל-sites/default/settings.local.php (ענן) או sites/default/settings.php (פרטי :

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  // Set HTTPS URL of portal 
  $base_url = 'https://developers.myCo.com';

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    // You could optionally substitute a canonical server name for $_SERVER['HTTP_HOST'] here.
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

מידע נוסף זמין בדפים הבאים:

הפניה אוטומטית של תנועת הפורטל ל-HTTPS

אפשר להפנות את כל התנועה בפורטלים אל HTTPS על ידי עדכון sites/default/settings.local.php (ענן) או sites/default/settings.php (פרטי Google Cloud). העדכונים הנדרשים משתנים בהתאם להפניות אוטומטיות ל-HTTPS באותו מיקום שם מארח או כמה שמות מארחים.

מתבצעת הפניה ל-HTTPS על אותו שם מארח

מוסיפים את הקוד הבא ל-sites/default/settings.local.php (cloud) או sites/default/settings.php (ענן פרטי) אל להפנות באופן אוטומטי לכל התנועה בפורטלים אל HTTPS באותו שם מארח (לדוגמה, *.devportal.apigee.io).

בתרחיש הזה, אם מפתח מבקר בפורטל שלכם בכתובת live-example.devportal.apigee.io, אבל צריך לגשת לאישור שהועלה בשביל devportal.example.com, הבקשה נכשל.

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

מתבצעת הפניה אל HTTPS במספר שמות מארחים

מוסיפים את הקוד הבא לקובץ sites/default/settings.local.php (ענן) או sites/default/settings.php (ענן פרטי) אל להפנות באופן אוטומטי לכל התנועה בפורטלים ל-HTTPS במספר שמות מארחים.

  // Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;
  // Assume we are not forcing a redirect until proven otherwise.
  $force_redirect = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }
  
  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    // We will force a redirect because HTTPS is required.
    $force_redirect = TRUE;
  }
  
  // This works on Pantheon only; the constant is undefined elsewhere.
  switch (PANTHEON_ENVIRONMENT) {
    case 'dev':
      $canonical_hostname = 'dev.devportal.example.com';
      break;
    case 'test':
      $canonical_hostname = 'test.devportal.example.com';
      break;
    case 'live':
      $canonical_hostname = 'devportal.example.com';
      break;
    default:
      $canonical_hostname = strtolower($_SERVER['HTTP_HOST']);
      break;
  }
  if ($canonical_hostname != strtolower($_SERVER['HTTP_HOST'])) {
    // We will force a redirect because hostname is not canonical.
    $force_redirect = TRUE;
  }

  if ($force_redirect) {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $canonical_hostname . $_SERVER['REQUEST_URI']);
    exit;
  }
}