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

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

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

  • ระบบคลาวด์: กำหนดค่า TLS จาก Pantheon หรือ Acquia ซึ่งเป็นบริการโฮสติ้งในระบบคลาวด์ สำหรับพอร์ทัล
  • Apigee Edge for 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. สำหรับการสื่อสารระหว่างนักพัฒนาแอปกับพอร์ทัล

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

    วิธีที่คุณกำหนดค่า TLS สำหรับสถานการณ์นี้จะขึ้นอยู่กับวิธีที่คุณติดตั้งใช้งาน พอร์ทัล ไม่ว่าจะเป็นระบบคลาวด์หรือ Apigee Edge for 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

การติดตั้งใช้งาน Edge แบบ Private Cloud

สำหรับการติดตั้งใช้งาน Edge แบบ 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 for Private Cloud

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

Pantheon

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

Acquia

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

พอร์ทัล Edge for Private Cloud

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

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

  • กำหนดค่า 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 (ระบบคลาวด์) หรือ 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 (ระบบคลาวด์) หรือ 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 (ระบบคลาวด์) หรือ 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;
  }
}