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

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

קביעת הגדרות נוספות של TLS (אבטחת שכבת התעבורה)

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

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

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