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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

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

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

TLS והפורטל

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

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

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

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

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

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

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

ההגדרה של Edge Management API קובעת אם אפשר להשתמש ב-TLS בתקשורת או לא. אם ממשק ה-API לניהול Edge מוגדר לשימוש ב-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 של שרת ניהול Edge ו-TLSport היא יציאת ה-TLS של ממשק ה-API לניהול Edge. לדוגמה, בהתאם להגדרות של Edge, מספר היציאה יכול להיות 8443 או אפילו 8080.

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

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

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

פנתאון

Pantheon מספקת 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 (ענן פרטי) כדי לבצע שינויים בהגדרות ה-TLS של הפורטל.

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

אפשר להגדיר את המאפיינים הבאים בקובץ 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_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 (cloud) או לקובץ 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 (Private Cloud). העדכונים הנדרשים משתנים בהתאם לכך שאתם מפנים אל HTTPS באותו שם מארח או בכמה שמות מארחים.

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

מוסיפים את הקוד הבא לקובץ sites/default/settings.local.php (cloud) או לקובץ sites/default/settings.php (Private Cloud) כדי להפנות את כל התנועה בפורטל אל 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;
  }
}