Menggunakan TLS di portal

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Anda dapat mengonfigurasi portal untuk menggunakan TLS. Prosedur konfigurasi TLS untuk portal bergantung pada cara Anda men-deploy portal:

  • Cloud: Konfigurasi TLS dari Pantheon atau Acquia, hosting berbasis cloud untuk portal.
  • Apigee Edge untuk Private Cloud: Mengonfigurasi TLS lokal di server yang menghosting portal.

TLS dan portal

Gambar berikut menunjukkan dua tempat portal menggunakan TLS:

  1. Untuk komunikasi antara portal dan API pengelolaan Edge.

    Portal ini tidak berfungsi sebagai sistem yang berdiri sendiri. Sebaliknya, banyak informasi yang digunakan oleh portal sebenarnya disimpan di Edge, tempat Edge dapat di-deploy di cloud atau secara lokal sebagai penginstalan Private Cloud. Jika perlu, portal membuat HTTP atau HTTPS ke Edge management API untuk mengambil informasi atau mengirim informasi.

    Saat membuat portal, salah satu langkah pertama yang harus dilakukan adalah menentukan URL API pengelolaan Edge. Bergantung pada cara API pengelolaan Edge dikonfigurasi, URL tersebut dapat menggunakan TLS. Lihat Membuat portal developer untuk mengetahui info selengkapnya.
  2. Untuk komunikasi antara developer dan portal.

    Saat Anda menggunakan portal Layanan Developer untuk men-deploy API, developer Anda login ke portal untuk mendaftarkan aplikasi dan menerima kunci API. Kredensial login dan kunci API informasi eksklusif yang ingin Anda kirim melalui HTTPS untuk memastikan keamanannya. Ini jenis informasi kepemilikan harus dikirim melalui HTTPS.

    Cara Anda mengonfigurasi TLS untuk skenario ini tergantung pada bagaimana Anda telah men-deploy portal: cloud atau Apigee Edge untuk Private Cloud. Bagian berikut menjelaskan kedua skenario.

Mengonfigurasi TLS di antara portal dan Edge management API

Konfigurasi Edge management API menentukan apakah komunikasi dapat digunakan TLS. Jika API pengelolaan Edge dikonfigurasi untuk menggunakan TLS, portal dapat menggunakan HTTPS. Jika tidak, portal akan berkomunikasi dengan Edge melalui HTTP. Oleh karena itu, sebagai pengembang portal, Anda hanya perlu mengetahui bagaimana Edge dikonfigurasi untuk mengatur koneksi antara portal dan Edge.

Untuk mengetahui prosedur yang akan Anda gunakan untuk mengonfigurasi koneksi ke Edge management API, lihat Membuat developer portal.

Versi Edge berbasis cloud

Jika portal Anda terhubung ke Edge versi berbasis cloud, URL untuk Edge management API telah dikonfigurasi sebelumnya oleh Apigee untuk menggunakan TLS. Saat mengonfigurasi portal, Anda mengakses API pengelolaan edge dengan menggunakan URL https://api.enterprise.apigee.com/v1.

Penginstalan Edge Private Cloud

Untuk penginstalan Edge Private Cloud, URL API pengelolaan Edge berada di formulir:
http://EdgePrivateCloudIp:8080/v1
atau:
https://EdgePrivateCloudIp:TLSport/v1

dengan EdgePrivateCloudIp adalah alamat IP Edge Management Server server dan TLSport adalah port TLS untuk API pengelolaan Edge. Misalnya, nomor port dapat berupa 8443 atau bahkan 8080 berdasarkan konfigurasi Edge.

Mengonfigurasi TLS antara developer dan portal

Cara Anda mengonfigurasi TLS antara developer dan portal bergantung pada cara Anda men-deploy portal: cloud atau Apigee Edge untuk Private Cloud.

Portal berbasis cloud

Pantheon

Pantheon menyediakan HTTPS otomatis gratis untuk semua situs di platformnya melalui Pantheon Global CDN dan menggunakan Let's Encrypt. Lihat juga HTTPS di CDN Global Pantheon.

Acquia

Untuk mengaktifkan TLS/SSL menggunakan Acquia, lihat Mengaktifkan SSL.

Edge untuk Pribadi Portal cloud

Semua penginstalan Private Cloud dari portal yang direkomendasikan Apigee mengharuskan portal di belakang load balancer, seperti yang ditunjukkan di bawah ini:

Oleh karena itu, untuk penginstalan lokal, Anda memiliki dua opsi untuk mengonfigurasi TLS:

  • Mengonfigurasi TLS di load balancer: Konfigurasikan TLS di load balancer itu sendiri, dan bukan di portal. Oleh karena itu, prosedur yang Anda gunakan untuk mengkonfigurasi TLS adalah bergantung pada load balancer. Lihat dokumentasi di load balancer Anda untuk mengetahui informasi selengkapnya tidak akurat atau tidak sesuai.
  • Konfigurasi TLS di portal itu sendiri: Jika perlu, Anda dapat mengonfigurasi TLS di server web yang menjadi {i>host<i} portal. Lihat Mengonfigurasi portal yang akan digunakan HTTPS untuk informasi selengkapnya.

Anda harus mendapatkan sertifikat TLS sendiri sebelum dapat men-deploy portal ke produksi lingkungan fleksibel App Engine.

Mengonfigurasi setelan TLS tambahan

Anda dapat mengedit sites/default/settings.local.php (cloud) atau sites/default/settings.php (Pribadi Cloud) untuk membuat perubahan konfigurasi ke TLS untuk portal.

Saat mengedit file, tambahkan instance fungsi ini_set() untuk menetapkan properti. Untuk informasi selengkapnya tentang fungsi ini, lihat: http://php.net/manual/en/function.ini-set.php.

Anda dapat menyetel properti berikut di sites/default/settings.local.php (cloud) atau sites/default/settings.php (Pribadi Google Cloud):

  • cookie_httponly: (Direkomendasikan) Menentukan bahwa cookie hanya dapat diakses melalui protokol HTTP. Setel ini properti sebagai:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (Opsional) Menentukan bahwa cookie hanya dapat dikirim melalui koneksi aman. Namun, berarti semua konten harus ditayangkan melalui HTTPS. Jika setelan ini diaktifkan, situs tidak akan bekerja melalui HTTP. Tetapkan properti ini sebagai:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime dan cookie_lifetime: (Opsional) gc_lifeteime menentukan jumlah detik setelah data berpotensi untuk dibersihkan, dan cookie_lifetime menentukan masa pakai cookie dalam hitungan detik. Tetapkan properti ini sebagai:

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

Untuk informasi selengkapnya tentang cara menyiapkan TLS antara portal developer dan klien, lihat Aktifkan SSL untuk Komunikasi HTTPS Aman di situs dokumen Pantheon.

Mengonfigurasi TLS dengan Load Balancer

Untuk meningkatkan performa, load balancer terkadang dikonfigurasi untuk melakukan penghentian TLS. Dengan penghentian TLS, load balancer akan mendekripsi pesan yang dikirim melalui https:// dan meneruskan pesan ke backend server melalui http://. Itu menghemat server backend untuk overhead mendekripsi pesan https:// itu sendiri.

Jika load balancer meneruskan pesan http yang tidak terenkripsi ke server di pusat data yang sama, keamanan bukanlah masalah. Namun, jika load balancer meneruskan pesan melalui http:// ke server di luar data pusat, seperti portal developer Apigee Anda, pesan tersebut tidak dienkripsi, yang membuka celah keamanan ini.

Jika portal developer Anda berada di belakang load balancer yang menggunakan penghentian TLS, dan Anda ingin semua traffic yang disalurkan melalui https://, halaman situs harus hanya berisi link https:// dan Anda harus menambahkan kode berikut ke portal developer sites/default/settings.local.php (cloud) atau sites/default/settings.php (Pribadi Cloud). Karena load balancer tidak secara otomatis mengubah konten halaman HTML, kode tersebut memastikan bahwa semua link yang diteruskan ke klien dimulai dengan https://.

Untuk mengonfigurasi TLS dengan load balancer, tambahkan baris berikut ke file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Pribadi Google 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;
  }
}

Untuk informasi selengkapnya, lihat:

Mengalihkan traffic portal ke HTTPS

Anda dapat mengalihkan semua traffic portal ke HTTPS dengan memperbarui sites/default/settings.local.php (cloud) atau sites/default/settings.php (Pribadi Cloud). Pembaruan yang diperlukan bervariasi berdasarkan apakah Anda mengalihkan ke HTTPS pada saat yang sama nama {i>host<i} atau beberapa nama {i>host<i}.

Mengalihkan ke HTTPS pada nama host yang sama

Tambahkan kode berikut ke sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud) ke mengalihkan ke semua traffic portal ke HTTPS di nama host yang sama (misalnya, *.devportal.apigee.io).

Dalam skenario ini, jika developer mengunjungi portal Anda di live-example.devportal.apigee.io, tetapi memerlukan akses sertifikat yang diupload untuk devportal.example.com, permintaan akan gagal.

// 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;
  }
}

Mengalihkan ke HTTPS di beberapa nama host

Tambahkan kode berikut ke file sites/default/settings.local.php Anda (cloud) atau sites/default/settings.php (Private Cloud) ke mengalihkan ke semua lalu lintas portal ke HTTPS di beberapa nama {i>host<i}.

  // 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;
  }
}