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

TLS dan portal

Gambar berikut menunjukkan dua tempat tempat portal menggunakan TLS:

  1. Untuk komunikasi antara portal dan Edge Management API.

    Portal tidak berfungsi sebagai sistem mandiri. Sebaliknya, sebagian besar informasi yang digunakan oleh portal sebenarnya disimpan di Edge, tempat Edge dapat di-deploy di cloud atau di lokal sebagai penginstalan Private Cloud. Jika perlu, portal 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 cara 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 eksklusif ini harus dikirim melalui HTTPS.

    Cara Anda 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 Edge dikonfigurasi untuk menetapkan koneksi antara portal dan Edge.

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

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 Edge Management API menggunakan URL https://api.enterprise.apigee.com/v1.

Penginstalan Edge Private Cloud

Untuk penginstalan Edge Private Cloud, URL Edge Management API berbentuk:
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 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.

Portal Edge for 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:

  • Konfigurasi TLS di load balancer: Konfigurasi 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.
  • Mengonfigurasi TLS di portal itu sendiri: Jika perlu, Anda dapat mengonfigurasi TLS di server web yang menghosting portal. Lihat Mengonfigurasi portal untuk menggunakan HTTPS untuk mengetahui informasi selengkapnya.

Anda harus mendapatkan sertifikat TLS 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 pada TLS untuk portal.

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

Anda dapat menetapkan properti berikut dalam 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 yang aman. Namun, hal 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 setelah data berpotensi dibersihkan, dan cookie_lifetime menentukan masa aktif cookie dalam detik. Tetapkan properti ini sebagai:

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

Untuk mengetahui informasi selengkapnya tentang penyiapan TLS antara portal developer dan klien, lihat Enable SSL for Secure HTTPS Communication di situs dokumen Pantheon.

Mengonfigurasi TLS dengan Load Balancer

Untuk performa yang lebih baik, load balancer terkadang dikonfigurasi untuk melakukan TLS termination. Dengan penghentian TLS, load balancer mendekripsi pesan yang dikirim melalui https:// dan meneruskan pesan ke server backend melalui http://. Hal ini menghemat server backend dari overhead mendekripsi pesan https:// itu sendiri.

Jika load balancer meneruskan pesan http yang tidak dienkripsi ke server di pusat data yang sama, keamanan tidak menjadi masalah. Namun, jika load balancer meneruskan pesan melalui http:// ke server di luar pusat data, seperti portal developer Apigee, pesan tersebut tidak dienkripsi, yang membuka celah 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 berisi link https:// saja dan Anda harus menambahkan kode berikut ke file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud) di portal developer Anda. Karena load balancer tidak otomatis mengubah konten halaman HTML, kode 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 (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;
  }
}

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 (Private Cloud). Pembaruan yang diperlukan bervariasi berdasarkan apakah Anda mengalihkan ke HTTPS di nama host yang sama atau beberapa nama host.

Mengalihkan ke HTTPS di nama host yang sama

Tambahkan kode berikut ke file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud) untuk mengarahkan ulang 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 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 di beberapa nama host

Tambahkan kode berikut ke file sites/default/settings.local.php (cloud) atau sites/default/settings.php (Private Cloud) untuk mengalihkan 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;
  }
}