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

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

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

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

TLS והפורטל

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

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

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

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

    כשמשתמשים בפורטל Developer Services כדי לפרוס את ממשקי ה-API, המפתחים מתחברים לפורטל כדי לרשום אפליקציות ולקבל מפתחות API. פרטי הכניסה ומפתח ה-API הם מידע קנייני שצריך לשלוח באמצעות HTTPS כדי להבטיח את האבטחה שלהם. This type of proprietary information should be sent over HTTPS.

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

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

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

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

Pantheon

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

Acquia

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

Edge for Private Cloud portals

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

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

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

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

הגדרת הגדרות TLS נוספות

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

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

אפשר להגדיר את המאפיינים הבאים בקובץ 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_maxlifetime ו-cookie_lifetime: (אופציונלי) gc_lifeteime מציין את מספר השניות שאחריהן יכול להיות שהנתונים יימחקו, ו-cookie_lifetime מציין את משך החיים של קובץ ה-Cookie בשניות. מגדירים את המאפיינים האלה כך:

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

מידע נוסף על הגדרת TLS בין פורטל המפתחים לבין לקוחות זמין במאמר Enable SSL for Secure HTTPS Communication באתר התיעוד של Pantheon.

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

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

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

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

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

// 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 (cloud) או 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;
  }
}