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: Konfigurasikan TLS dari Pantheon atau Acquia, layanan hosting berbasis cloud untuk portal.
  • Apigee Edge untuk Private Cloud: Konfigurasikan TLS secara lokal di server yang menghosting portal.

TLS dan portal

Gambar berikut menunjukkan dua tempat portal menggunakan TLS:

  1. Untuk komunikasi antara portal dan Edge management API.

    Portal tidak berfungsi sebagai sistem yang berdiri sendiri. Sebaliknya, sebagian besar informasi yang digunakan oleh portal sebenarnya disimpan di Edge, tempat Edge dapat di-deploy di cloud atau secara lokal sebagai penginstalan Private Cloud. Jika diperlukan, portal akan membuat permintaan HTTP atau HTTPS ke Edge Management API untuk mengambil informasi atau mengirim informasi.

    Saat membuat portal, salah satu langkah pertama yang harus Anda lakukan adalah menentukan URL Edge Management API. Bergantung pada konfigurasi Edge Management API, URL tersebut dapat menggunakan TLS. Lihat Membuat portal developer untuk mengetahui informasi selengkapnya.
  2. Untuk komunikasi antara developer dan portal.

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

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

Mengonfigurasi TLS antara portal dan Edge Management API

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

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

Versi Edge berbasis cloud

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

Penginstalan Private Cloud Edge

Untuk penginstalan Private Cloud Edge, URL Edge management API tersedia dalam bentuk:
http://EdgePrivateCloudIp:8080/v1
atau:
https://EdgePrivateCloudIp:TLSport/v1

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

Mengonfigurasi TLS antara developer dan portal

Cara 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 portal Private Cloud

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

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, bukan di portal. Oleh karena itu, prosedur yang Anda gunakan untuk mengonfigurasi TLS bergantung pada load balancer. Lihat dokumentasi tentang load balancer Anda untuk mengetahui informasi selengkapnya.
  • Konfigurasi TLS di portal: Jika perlu, Anda dapat mengonfigurasi TLS di server web yang menghosting portal tersebut. Lihat Mengonfigurasi portal untuk menggunakan HTTPS untuk informasi selengkapnya.

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

Mengonfigurasi setelan TLS tambahan

Anda dapat mengedit file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud) untuk melakukan perubahan konfigurasi ke TLS untuk portal tersebut.

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 menetapkan properti berikut di file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud):

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

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

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime dan cookie_lifetime: (Opsional) gc_lifeteime menentukan jumlah detik sebelum data dapat dihapus secara potensial, dan cookie_lifetime menentukan masa aktif cookie dalam hitungan detik. Tetapkan properti ini sebagai:

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

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

Mengonfigurasi TLS dengan Load Balancer

Untuk mendapatkan performa yang lebih baik, load balancer terkadang dikonfigurasi untuk melakukan penghentian TLS. Dengan penghentian TLS, load balancer mendekripsi pesan yang dikirim melalui https:// dan meneruskan pesan tersebut ke server backend melalui http://. Cara tersebut menghemat beban server backend jika melakukan dekripsi pesan https:// itu sendiri.

Jika load balancer meneruskan pesan http yang tidak dienkripsi ke server di pusat data yang sama, keamanan tidak akan menjadi masalah. Namun, jika load balancer meneruskan pesan melalui http:// ke server di luar pusat data, seperti portal developer Apigee, pesan tidak akan dienkripsi dan akan membuka lubang keamanan.

Jika portal developer Anda berada di belakang load balancer yang menggunakan penghentian TLS, dan Anda ingin semua traffic ditayangkan melalui https://, halaman situs harus hanya berisi link https:// dan Anda perlu menambahkan kode berikut ke file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Cloud Pribadi) portal developer Anda. 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 (Cloud Pribadi):

// 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 file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Cloud Pribadi). Update yang diperlukan bervariasi berdasarkan apakah Anda mengalihkan ke HTTPS pada nama host yang sama atau beberapa nama host.

Mengalihkan ke HTTPS pada nama host yang sama

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

Dalam skenario ini, jika developer mengunjungi portal Anda di live-example.devportal.apigee.io, tetapi perlu mengakses 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 pada beberapa nama host

Tambahkan kode berikut ke file sites/default/settings.local.php Anda (cloud) atau file sites/default/settings.php (Private Cloud) untuk mengalihkan ke semua traffic portal ke HTTPS di beberapa nama host.

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