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

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

URL ของ Edge Management API สำหรับการติดตั้ง Private Cloud จะอยู่ในรูปแบบ
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 ด้วย

Acquia

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

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

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

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

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

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

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

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

เมื่อแก้ไขไฟล์ ให้เพิ่มอินสแตนซ์ของฟังก์ชัน ini_set() เพื่อตั้งค่าพร็อพเพอร์ตี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันนี้ได้ที่ ini_set

คุณสามารถตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์ 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_maslifetime และ 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;
  }
}