การใช้ 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 ดังกล่าว ขึ้นอยู่กับการกำหนดค่า Edge Management API สามารถใช้ TLS ได้ ดูการสร้าง พอร์ทัลนักพัฒนาซอฟต์แวร์สำหรับข้อมูลเพิ่มเติม
  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 เวอร์ชันในระบบคลาวด์ URL สำหรับ Edge Management API กำหนดค่าไว้ล่วงหน้าโดย Apigee ให้ใช้ 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 เซิร์ฟเวอร์เซิร์ฟเวอร์และ 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 ด้วย

Acquia

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

Edge สำหรับส่วนตัว พอร์ทัลระบบคลาวด์

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

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

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

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

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

คุณแก้ไข sites/default/settings.local.php (ระบบคลาวด์) ได้ หรือ sites/default/settings.php (ส่วนตัว Cloud) เพื่อทำการเปลี่ยนแปลงการกำหนดค่า TLS สำหรับพอร์ทัล

เมื่อแก้ไขไฟล์ ให้เพิ่มอินสแตนซ์ของฟังก์ชัน ini_set() เพื่อตั้งค่าพร็อพเพอร์ตี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันนี้ได้ที่ http://php.net/manual/en/function.ini-set.php

คุณสามารถตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน sites/default/settings.local.php (ระบบคลาวด์) หรือ sites/default/settings.php (ส่วนตัว ระบบคลาวด์)

  • 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 สำหรับ Secure HTTPS Communication ในเว็บไซต์เอกสาร Pantheon

กำลังกำหนดค่า TLS ที่มีตัวจัดสรรภาระงาน

บางครั้งตัวจัดสรรภาระงานได้รับการกำหนดค่าให้ดำเนินการสิ้นสุด TLS เพื่อประสิทธิภาพที่ดีขึ้น เมื่อเปิดใช้ TLS ตัวจัดสรรภาระงานจะถอดรหัสข้อความที่ส่งผ่าน https:// และส่งต่อข้อความไปยังแบ็กเอนด์ ผ่าน http:// ซึ่งจะช่วยประหยัด แบ็กเอนด์เซิร์ฟเวอร์ให้กับค่าใช้จ่ายในการถอดรหัสข้อความ https:// ด้วยตนเอง

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

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

หากต้องการกำหนดค่า TLS ด้วยตัวจัดสรรภาระงาน ให้เพิ่มบรรทัดต่อไปนี้ไปยัง sites/default/settings.local.php (ระบบคลาวด์) หรือ sites/default/settings.php (ส่วนตัว ระบบคลาวด์)

// 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 (ส่วนตัว ) การอัปเดตที่จำเป็นจะแตกต่างกันไป ขึ้นอยู่กับว่าคุณเปลี่ยนเส้นทางไปยัง 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;
  }
}