การใช้ TLS ในพอร์ทัล

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

คุณกำหนดค่าพอร์ทัลเพื่อใช้ TLS ได้ ขั้นตอนการกำหนดค่า TLS สำหรับพอร์ทัลจะขึ้นอยู่กับวิธีที่คุณทำให้พอร์ทัลใช้งานได้ ดังนี้

  • ระบบคลาวด์: กำหนดค่า TLS จาก Pantheon หรือ Acquia ซึ่งเป็นบริการโฮสติ้งในระบบคลาวด์สำหรับพอร์ทัล
  • Apigee Edge สำหรับ Private Cloud: กำหนดค่า TLS ภายในองค์กรในเซิร์ฟเวอร์ที่โฮสต์พอร์ทัล

TLS และพอร์ทัล

รูปภาพต่อไปนี้แสดง 2 ตำแหน่งที่พอร์ทัลใช้ TLS

  1. สำหรับการสื่อสารระหว่างพอร์ทัลกับ Edge Management API

    พอร์ทัลจะไม่ทำงานเป็นระบบแบบสแตนด์อโลน แต่ข้อมูลส่วนใหญ่ที่พอร์ทัลใช้จะจัดเก็บไว้ใน Edge จริงๆ ซึ่งเป็นที่ที่ Edge สามารถนำไปใช้งานในระบบคลาวด์หรือภายในองค์กรในฐานะการติดตั้ง Private Cloud ได้ หากจำเป็น พอร์ทัลจะส่งคำขอ HTTP หรือ HTTPS ไปยัง Edge Management API เพื่อดึงข้อมูลหรือส่งข้อมูล

    เมื่อสร้างพอร์ทัล ขั้นตอนแรกที่คุณต้องทำคือการระบุ URL ของ Edge Management API URL ดังกล่าวจะใช้ TLS ได้ ทั้งนี้ขึ้นอยู่กับวิธีการกำหนดค่า Edge Management API ดูข้อมูลเพิ่มเติมได้ที่การสร้างพอร์ทัลนักพัฒนาซอฟต์แวร์
  2. สำหรับการสื่อสารระหว่างนักพัฒนาซอฟต์แวร์กับพอร์ทัล

    เมื่อคุณใช้พอร์ทัลบริการสำหรับนักพัฒนาแอปเพื่อทำให้ API ใช้งานได้ นักพัฒนาซอฟต์แวร์จะเข้าสู่ระบบพอร์ทัลเพื่อลงทะเบียนแอปและรับคีย์ API ข้อมูลเข้าสู่ระบบและคีย์ API เป็นข้อมูลที่เป็นกรรมสิทธิ์ที่คุณต้องการส่งผ่าน HTTPS เพื่อรับรองความปลอดภัย ข้อมูลที่เป็นกรรมสิทธิ์ประเภทนี้ควรส่งผ่าน HTTPS

    วิธีกำหนดค่า TLS สำหรับสถานการณ์นี้จะขึ้นอยู่กับวิธีทำให้พอร์ทัลใช้งานได้ ซึ่งได้แก่ ระบบคลาวด์หรือ Apigee Edge สำหรับ Private Cloud ส่วนต่อไปนี้จะอธิบายทั้ง 2 สถานการณ์

การกำหนดค่า TLS ระหว่างพอร์ทัลกับ Edge Management API

การกำหนดค่าของ Edge Management API จะกำหนดว่าการสื่อสารจะใช้ TLS ได้หรือไม่ หากมีการกำหนดค่า Edge Management API ให้ใช้ TLS พอร์ทัลจะใช้ HTTPS ได้ ไม่เช่นนั้น พอร์ทัลจะสื่อสารกับ Edge ผ่าน HTTP ดังนั้น ในฐานะนักพัฒนาซอฟต์แวร์พอร์ทัล คุณแค่ต้องทราบเพียงว่า Edge ได้รับการกำหนดค่าอย่างไรเพื่อตั้งค่าการเชื่อมต่อระหว่างพอร์ทัลกับ Edge

ดูขั้นตอนที่คุณใช้เพื่อกำหนดค่าการเชื่อมต่อกับ Edge Management API ได้ที่การสร้างพอร์ทัลนักพัฒนาซอฟต์แวร์

Edge เวอร์ชันในระบบคลาวด์

หากพอร์ทัลเชื่อมต่อกับ Edge เวอร์ชันในระบบคลาวด์ แล้ว Apigee จะกำหนดค่า URL ของ Edge Management API ไว้ล่วงหน้าเพื่อใช้ TLS เมื่อกำหนดค่าพอร์ทัล คุณจะเข้าถึง Edge Management API ได้โดยใช้ URL https://api.enterprise.apigee.com/v1

การติดตั้ง Private Cloud ของ Edge

สำหรับการติดตั้ง Edge Cloud ของ Private Cloud จะมี URL ของ Edge Management API ในรูปแบบ
http://EdgePrivateCloudIp:8080/v1
หรือ
https://EdgePrivateCloudIp:TLSport/v1

โดยที่ EdgePrivateCloudIp คือที่อยู่ IP ของเซิร์ฟเวอร์ Edge Management Server และ TLSport เป็นพอร์ต TLS สำหรับ Edge Management API เช่น หมายเลขพอร์ตอาจเป็น 8443 หรือแม้แต่ 8080 โดยขึ้นอยู่กับการกำหนดค่า Edge

การกำหนดค่า TLS ระหว่างนักพัฒนาแอปกับพอร์ทัล

วิธีการกำหนดค่า TLS ระหว่างนักพัฒนาซอฟต์แวร์และพอร์ทัลจะขึ้นอยู่กับวิธีที่คุณทำให้พอร์ทัลใช้งานได้ เช่น ระบบคลาวด์หรือ Apigee Edge สำหรับ Private Cloud

พอร์ทัลในระบบคลาวด์

แพนธีอัน

Pantheon ให้บริการ HTTPS อัตโนมัติฟรีสําหรับเว็บไซต์ทั้งหมดบนแพลตฟอร์มผ่าน Pantheon Global CDN และใช้ Let's Encrypt โปรดดู HTTPS บน Global CDN ของ Pantheon ด้วย

อักเคีย

หากต้องการเปิดใช้ TLS/SSL โดยใช้ Acquia โปรดดูการเปิดใช้ SSL

Edge สำหรับพอร์ทัล Private Cloud

การติดตั้ง Private Cloud ทั้งหมดของ Apigee ในพอร์ทัลกำหนดให้พอร์ทัลต้องอยู่หลังตัวจัดสรรภาระงาน ตามที่แสดงด้านล่าง

ดังนั้นสำหรับการติดตั้งภายในองค์กร คุณมี 2 ตัวเลือกในการกำหนดค่า TLS ดังนี้

  • กำหนดค่า TLS บนตัวจัดสรรภาระงาน: กำหนดค่า TLS บนตัวจัดสรรภาระงานเอง ไม่ใช่ในพอร์ทัล ดังนั้นกระบวนการที่คุณใช้เพื่อกำหนดค่า TLS จึงขึ้นอยู่กับตัวจัดสรรภาระงาน ดูเอกสารเกี่ยวกับตัวจัดสรรภาระงานสำหรับข้อมูลเพิ่มเติม
  • กำหนดค่า TLS บนพอร์ทัลเอง: หากจำเป็น คุณกำหนดค่า TLS ในเว็บเซิร์ฟเวอร์ที่โฮสต์พอร์ทัลได้ ดูการกำหนดค่าพอร์ทัลเพื่อใช้ HTTPS สำหรับข้อมูลเพิ่มเติม

คุณต้องได้รับใบรับรอง TLS ของตนเองก่อนจึงจะทำให้พอร์ทัลใช้งานได้กับสภาพแวดล้อมที่ใช้งานจริงได้

การกำหนดการตั้งค่า TLS เพิ่มเติม

คุณสามารถแก้ไขไฟล์ sites/default/settings.local.php (ระบบคลาวด์) หรือ 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:// ซึ่งเป็นการบันทึกค่าใช้จ่ายของเซิร์ฟเวอร์แบ็กเอนด์ในการถอดรหัสข้อความ https:// ด้วยตนเอง

หากตัวจัดสรรภาระงานส่งต่อข้อความ HTTP ที่ไม่ได้เข้ารหัสไปยังเซิร์ฟเวอร์ในศูนย์ข้อมูลเดียวกัน ความปลอดภัยก็ไม่เป็นปัญหา อย่างไรก็ตาม หากตัวจัดสรรภาระงานส่งต่อข้อความผ่าน http:// ไปยังเซิร์ฟเวอร์นอกศูนย์ข้อมูล เช่น พอร์ทัลนักพัฒนาซอฟต์แวร์ Apigee ข้อความนั้นจะไม่มีการเข้ารหัส ซึ่งจะเปิดช่องโหว่ด้านความปลอดภัย

หากพอร์ทัลนักพัฒนาซอฟต์แวร์อยู่หลังตัวจัดสรรภาระงานที่ใช้การสิ้นสุด TLS และคุณต้องการให้การรับส่งข้อมูลทั้งหมดผ่าน https:// หน้าเว็บไซต์จะต้องมีลิงก์ https:// เท่านั้น และคุณจะต้องเพิ่มโค้ดต่อไปนี้ลงในพอร์ทัลนักพัฒนาซอฟต์แวร์ sites/default/settings.local.php (ระบบคลาวด์) หรือ 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 (ระบบคลาวด์) หรือ 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 (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;
  }
}