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

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

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

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

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

במאמר תחילת העבודה לפתח את פורטל המפתחים מוסבר על התהליך שבו משתמשים כדי להגדיר את החיבור ל-Edge management API.

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

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

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

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

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

הגדרת 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 בשרת האינטרנט שמארח את הפורטל. כברירת מחדל, Apigee מתקין את שרת האינטרנט Apache. למידע על הגדרת TLS ל-Apache, ראו הפעלת HTTP Secure (HTTPS) .

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

קביעת הגדרות TLS נוספות

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

כשעורכים את הקובץ, מוסיפים מופעים של הפונקציה ini_set() כדי להגדיר מאפיין. למידע נוסף על הפונקציה הזו, ראו: ini_set.

אפשר להגדיר את המאפיינים הבאים בקובץ sites/default/settings.local.php (cloud) או בקובץ sites/default/settings.php (Private Cloud):

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

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

    ini_set('session.cookie_secure', true);
  • gc_maslifetime ו-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 (cloud) או לקובץ sites/default/settings.php (ענן פרטי). מכיוון שמאזן העומסים לא משנה באופן אוטומטי את התוכן של דפי ה-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 (ענן פרטי). העדכונים הנדרשים משתנים בהתאם לאפשרות ההפניה ל-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;
  }
}