استفاده از TLS در پورتال

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

شما می‌توانید پورتال را برای استفاده از TLS پیکربندی کنید. مراحل پیکربندی TLS برای پورتال به نحوه‌ی پیاده‌سازی پورتال توسط شما بستگی دارد:

  • ابر : TLS را از Pantheon یا Acquia، سرویس‌های میزبانی ابری برای پورتال، پیکربندی کنید.
  • Apigee Edge برای فضای ابری خصوصی : پیکربندی TLS به صورت محلی روی سرور میزبان پورتال.

TLS و پورتال

تصویر زیر دو مکانی را که پورتال از TLS استفاده می‌کند، نشان می‌دهد:

  1. برای ارتباط بین پورتال و API مدیریت Edge.

    این پورتال به عنوان یک سیستم مستقل عمل نمی‌کند. در عوض، بسیاری از اطلاعات مورد استفاده پورتال در واقع در Edge ذخیره می‌شوند، جایی که Edge می‌تواند یا در فضای ابری یا در محل به عنوان یک نصب Private Cloud مستقر شود. در صورت لزوم، پورتال یک درخواست HTTP یا HTTPS به API مدیریت Edge ارسال می‌کند تا اطلاعات را بازیابی یا ارسال کند.

    وقتی پورتال خود را ایجاد می‌کنید، یکی از اولین اقداماتی که باید انجام دهید، مشخص کردن URL مربوط به API مدیریت Edge است. بسته به نحوه پیکربندی API مدیریت Edge، آن URL می‌تواند از TLS استفاده کند. برای اطلاعات بیشتر به بخش ایجاد پورتال توسعه‌دهندگان مراجعه کنید.
  2. برای ارتباط بین توسعه‌دهندگان و پورتال.

    وقتی از پورتال خدمات توسعه‌دهندگان برای استقرار APIهای خود استفاده می‌کنید، توسعه‌دهندگان شما برای ثبت برنامه‌ها و دریافت کلیدهای API به پورتال وارد می‌شوند. اطلاعات ورود به سیستم و کلید API اطلاعات اختصاصی هستند که می‌خواهید از طریق HTTPS ارسال شوند تا امنیت آنها تضمین شود. این نوع اطلاعات اختصاصی باید از طریق HTTPS ارسال شود.

    نحوه پیکربندی TLS برای این سناریو بستگی به نحوه استقرار پورتال دارد: ابری یا Apigee Edge برای ابر خصوصی. بخش‌های زیر هر دو سناریو را شرح می‌دهند.

پیکربندی TLS بین پورتال و API مدیریت Edge

پیکربندی API مدیریت Edge تعیین می‌کند که آیا ارتباط می‌تواند از TLS استفاده کند یا خیر. اگر API مدیریت Edge برای استفاده از TLS پیکربندی شده باشد، پورتال می‌تواند از HTTPS استفاده کند. در غیر این صورت، پورتال با Edge از طریق HTTP ارتباط برقرار می‌کند. بنابراین، به عنوان یک توسعه‌دهنده پورتال، فقط باید بدانید که Edge چگونه پیکربندی شده است تا ارتباط بین پورتال و Edge برقرار شود.

برای روشی که برای پیکربندی اتصال به API مدیریت Edge استفاده می‌کنید، به ایجاد پورتال توسعه‌دهنده مراجعه کنید.

نسخه مبتنی بر ابر Edge

اگر پورتال شما به نسخه ابری Edge متصل می‌شود، URL مربوط به API مدیریت Edge توسط Apigee برای استفاده از TLS از پیش پیکربندی شده است. هنگام پیکربندی پورتال، با استفاده از URL https://api.enterprise.apigee.com/v1 به API مدیریت Edge دسترسی پیدا می‌کنید.

نصب ابر خصوصی Edge

برای نصب Edge روی Private Cloud، آدرس URL مربوط به API مدیریت Edge به شکل زیر است:
http:// EdgePrivateCloudIp :8080/v1
یا:
https:// EdgePrivateCloudIp : TLSport /v1

که در آن EdgePrivateCloudIp آدرس IP سرور Edge Management Server و TLSport پورت TLS برای API مدیریت Edge است. به عنوان مثال، شماره پورت می‌تواند بر اساس پیکربندی Edge، ۸۴۴۳ یا حتی ۸۰۸۰ باشد.

پیکربندی TLS بین توسعه‌دهندگان و پورتال

نحوه پیکربندی TLS بین توسعه‌دهندگان و پورتال بستگی به نحوه استقرار پورتال دارد: ابری یا Apigee Edge برای ابر خصوصی.

پورتال‌های مبتنی بر ابر

پانتئون

پانتئون از طریق شبکه توزیع محتوای جهانی پانتئون و با استفاده از Let's Encrypt ، HTTPS خودکار و رایگان را برای همه سایت‌های روی پلتفرم خود ارائه می‌دهد. همچنین به HTTPS در شبکه توزیع محتوای جهانی پانتئون مراجعه کنید.

آکوئیا

برای فعال کردن 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 (Private Cloud) را ویرایش کنید تا تغییرات پیکربندی TLS را برای پورتال اعمال کنید.

هنگام ویرایش فایل، نمونه‌هایی از تابع 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 : (توصیه می‌شود) مشخص می‌کند که کوکی فقط از طریق پروتکل HTTP قابل دسترسی باشد. این ویژگی را به صورت زیر تنظیم کنید:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (اختیاری) مشخص می‌کند که کوکی‌ها فقط می‌توانند از طریق اتصالات امن ارسال شوند. با این حال، این بدان معناست که تمام محتوا باید از طریق HTTPS ارائه شود. اگر این تنظیم فعال باشد، سایت از طریق HTTP کار نخواهد کرد. این ویژگی را به صورت زیر تنظیم کنید:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime و cookie_lifetime : (اختیاری) gc_lifeteime تعداد ثانیه‌هایی را که پس از آن داده‌ها می‌توانند به طور بالقوه پاک شوند، مشخص می‌کند و cookie_lifetime طول عمر کوکی را بر حسب ثانیه مشخص می‌کند. این ویژگی‌ها را به صورت زیر تنظیم کنید:

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

برای اطلاعات بیشتر در مورد تنظیم TLS بین پورتال توسعه‌دهندگان و کلاینت‌ها، به بخش فعال‌سازی SSL برای ارتباط امن HTTPS در سایت مستندات Pantheon مراجعه کنید.

پیکربندی TLS با متعادل‌کننده‌های بار

برای عملکرد بهتر، متعادل‌کننده‌های بار گاهی اوقات طوری پیکربندی می‌شوند که خاتمه TLS را انجام دهند. با خاتمه TLS، متعادل‌کننده‌های بار پیام‌های ارسالی از طریق https:// را رمزگشایی کرده و پیام‌ها را از طریق http:// به سرورهای backend ارسال می‌کنند. این کار باعث صرفه‌جویی در سربار رمزگشایی خود پیام‌های https:// برای سرورهای backend می‌شود.

اگر متعادل‌کننده‌های بار، پیام‌های 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

شما می‌توانید با به‌روزرسانی فایل sites/default/settings.local.php (cloud) یا sites/default/settings.php (Private Cloud) خود، تمام ترافیک پورتال را به HTTPS هدایت کنید. به‌روزرسانی‌های مورد نیاز بسته به اینکه آیا شما در حال هدایت به 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 (cloud) یا فایل 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;
  }
}