Sử dụng TLS trên cổng thông tin

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Bạn có thể định cấu hình cổng thông tin để sử dụng TLS. Quy trình cấu hình TLS cho cổng thông tin tuỳ thuộc vào cách bạn triển khai cổng thông tin:

  • Cloud: Định cấu hình TLS từ Pantheon hoặc Acquia, các dịch vụ lưu trữ trên đám mây cho cổng thông tin.
  • Apigee Edge dành cho đám mây riêng tư: Định cấu hình TLS tại cơ sở trên máy chủ lưu trữ cổng thông tin.

TLS và cổng

Hình ảnh sau đây cho thấy hai nơi cổng thông tin sử dụng TLS:

  1. Để giao tiếp giữa cổng thông tin và API Quản lý Edge.

    Cổng thông tin không hoạt động như một hệ thống độc lập. Thay vào đó, phần lớn thông tin mà cổng sử dụng thực sự được lưu trữ trên Edge, nơi Edge có thể được triển khai trên đám mây hoặc tại cơ sở dưới dạng cài đặt Đám mây riêng tư. Khi cần, cổng sẽ gửi yêu cầu HTTP hoặc HTTPS đến API Quản lý Edge để truy xuất thông tin hoặc gửi thông tin.

    Khi tạo cổng thông tin, một trong những bước đầu tiên bạn phải thực hiện là chỉ định URL của API Quản lý Edge. Tuỳ thuộc vào cách định cấu hình API Quản lý Edge, URL đó có thể sử dụng TLS. Xem phần Tạo cổng thông tin cho nhà phát triển để biết thêm thông tin.
  2. Để giao tiếp giữa nhà phát triển và cổng thông tin.

    Khi bạn sử dụng cổng Dịch vụ dành cho nhà phát triển để triển khai API, nhà phát triển của bạn sẽ đăng nhập vào cổng này để đăng ký ứng dụng và nhận khoá API. Thông tin đăng nhập và khoá API là thông tin độc quyền mà bạn muốn gửi qua HTTPS để đảm bảo tính bảo mật của thông tin đó. Loại thông tin về quyền sở hữu riêng này phải được gửi qua HTTPS.

    Cách bạn định cấu hình TLS cho trường hợp này phụ thuộc vào cách bạn triển khai cổng thông tin: đám mây hoặc Apigee Edge cho đám mây riêng tư. Các phần sau đây mô tả cả hai trường hợp.

Định cấu hình TLS giữa cổng thông tin và API Quản lý Edge

Cấu hình của Edge Management API (API Quản lý Edge) xác định liệu hoạt động giao tiếp có thể sử dụng TLS hay không. Nếu Edge Management API được định cấu hình để sử dụng TLS, thì cổng thông tin có thể sử dụng HTTPS. Nếu không, cổng sẽ giao tiếp với Edge qua HTTP. Do đó, là một nhà phát triển cổng thông tin, bạn chỉ cần biết cách định cấu hình Edge để thiết lập kết nối giữa cổng thông tin và Edge.

Để biết quy trình mà bạn sử dụng để định cấu hình kết nối với API Quản lý Edge, hãy xem phần Tạo cổng thông tin cho nhà phát triển.

Phiên bản Edge trên đám mây

Nếu cổng thông tin của bạn kết nối với phiên bản dựa trên đám mây của Edge, thì URL cho API quản lý Edge sẽ được Apigee định cấu hình sẵn để sử dụng TLS. Khi định cấu hình cổng thông tin, bạn có thể truy cập vào API Quản lý Edge bằng cách sử dụng URL https://api.enterprise.apigee.com/v1.

Cài đặt Edge trên đám mây riêng tư

Đối với bản cài đặt Edge (trên nền tảng đám mây riêng tư), URL của API Quản lý Edge sẽ có dạng:
http://EdgePrivateCloudIp:8080/v1
hoặc:
https://EdgePrivateCloudIp:EdgePrivateCloudIp/v1

trong đó EdgePrivateCloudIp là địa chỉ IP của máy chủ Máy chủ quản lý biên và EdgePrivateCloudIp là cổng TLS cho API quản lý Edge. Ví dụ: số cổng có thể là 8443 hoặc thậm chí là 8080 dựa trên cấu hình Edge.

Định cấu hình TLS giữa các nhà phát triển và cổng thông tin

Cách bạn định cấu hình TLS giữa các nhà phát triển và cổng thông tin tuỳ thuộc vào cách bạn triển khai cổng thông tin: đám mây hoặc Apigee Edge cho đám mây riêng tư.

Cổng trên đám mây

Pantheon

Pantheon cung cấp HTTPS tự động miễn phí cho tất cả trang web trên nền tảng của mình thông qua Pantheon Global CDN và sử dụng Let's Encrypt. Xem thêm về HTTPS trên CDN toàn cầu của Pantheon.

Acquia

Để bật TLS/SSL bằng Acquia, hãy xem Bật SSL.

Edge dành cho cổng đám mây riêng tư

Tất cả các lượt cài đặt Đám mây riêng tư được đề xuất của Apigee đều yêu cầu cổng thông tin phải chạy sau một trình cân bằng tải, như thể hiện dưới đây:

Do đó, đối với các cài đặt tại cơ sở, bạn có hai tuỳ chọn để định cấu hình TLS:

  • Định cấu hình TLS trên trình cân bằng tải: Định cấu hình TLS trên chính trình cân bằng tải chứ không phải trên cổng thông tin. Do đó, quy trình mà bạn sử dụng để định cấu hình TLS phụ thuộc vào trình cân bằng tải. Hãy xem tài liệu về trình cân bằng tải của bạn để biết thêm thông tin.
  • Định cấu hình TLS trên chính cổng thông tin: Nếu cần, bạn có thể định cấu hình TLS trên máy chủ web lưu trữ cổng thông tin đó. Xem bài viết Định cấu hình cổng thông tin để sử dụng HTTPS để biết thêm thông tin.

Bạn phải có chứng chỉ TLS của riêng mình trước khi có thể triển khai cổng vào môi trường phát hành chính thức.

Định cấu hình các chế độ cài đặt bổ sung về TLS

Bạn có thể chỉnh sửa tệp sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (Đám mây riêng tư) để thay đổi cấu hình đối với TLS cho cổng thông tin.

Khi chỉnh sửa tệp, hãy thêm các bản sao của hàm ini_set() để đặt một thuộc tính. Để biết thêm thông tin về hàm này, hãy xem: http://php.net/manual/en/function.ini-set.php.

Bạn có thể đặt các thuộc tính sau trong tệp sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (riêng tư đám mây):

  • cookie_httponly: (Nên dùng) Chỉ định rằng cookie chỉ có thể truy cập được qua giao thức HTTP. Đặt thuộc tính này thành:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure – (Không bắt buộc) Chỉ định rằng cookie chỉ có thể được gửi qua kết nối an toàn. Tuy nhiên, điều này có nghĩa là tất cả nội dung phải được phân phát qua HTTPS. Nếu bạn bật chế độ cài đặt này, trang web sẽ không hoạt động qua HTTP. Đặt thuộc tính này là:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetimecookie_lifetime: (Không bắt buộc) gc_lifeteime chỉ định số giây mà dữ liệu có thể được làm sạch và cookie_lifetime chỉ định thời gian hoạt động của cookie tính bằng giây. Hãy đặt các thuộc tính này là:

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

Để biết thêm thông tin về cách thiết lập TLS giữa ứng dụng và cổng thông tin của nhà phát triển, hãy xem phần Bật SSL để giao tiếp HTTPS an toàn trên trang web tài liệu của Pantheon.

Định cấu hình TLS bằng Trình cân bằng tải

Để đạt hiệu suất tốt hơn, đôi khi trình cân bằng tải được định cấu hình để thực hiện việc chấm dứt TLS (Bảo mật tầng truyền tải). Khi chấm dứt TLS, trình cân bằng tải sẽ giải mã thư được gửi qua https:// và chuyển tiếp thông báo đến các máy chủ phụ trợ qua http://. Việc này giúp các máy chủ phụ trợ tiết kiệm được chi phí khi tự giải mã thông báo https://.

Nếu trình cân bằng tải chuyển tiếp thông báo http chưa mã hoá đến các máy chủ trong cùng một trung tâm dữ liệu, thì vấn đề bảo mật sẽ không bị ảnh hưởng. Tuy nhiên, nếu trình cân bằng tải chuyển tiếp thông báo qua http:// đến các máy chủ bên ngoài trung tâm dữ liệu (chẳng hạn như cổng thông tin dành cho nhà phát triển Apigee của bạn), thì thông báo sẽ không được mã hoá, dẫn đến một lỗ hổng bảo mật.

Nếu cổng thông tin dành cho nhà phát triển của bạn nằm sau những trình cân bằng tải đang sử dụng phương thức chấm dứt TLS và bạn muốn tất cả lưu lượng truy cập được phân phát qua https://, thì các trang web sẽ chỉ cần chứa đường liên kết https:// và bạn cần thêm mã sau vào trang web dành cho nhà phát triển sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (Đám mây riêng tư). Vì trình cân bằng tải không tự động chuyển đổi nội dung của các trang HTML, nên đoạn mã này đảm bảo rằng tất cả đường liên kết được chuyển đến ứng dụng đều bắt đầu bằng https://.

Để định cấu hình TLS bằng trình cân bằng tải, hãy thêm các dòng sau vào tệp sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (riêng tư đám mây):

// 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;
  }
}

Để biết thêm thông tin, hãy xem các bài viết sau:

Chuyển hướng lưu lượng truy cập cổng thông tin sang HTTPS

Bạn có thể chuyển hướng tất cả lưu lượng truy cập cổng thông tin sang HTTPS bằng cách cập nhật tệp sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (đám mây riêng tư). Yêu cầu cập nhật sẽ khác nhau tuỳ thuộc vào việc bạn chuyển hướng sang HTTPS trên cùng một tên hay nhiều tên máy chủ.

Chuyển hướng sang HTTPS trên cùng một tên máy chủ

Thêm mã sau vào tệp sites/default/settings.local.php (cloud) hoặc sites/default/settings.php (đám mây riêng tư) để chuyển hướng đến tất cả lưu lượng truy cập cổng thông tin sang HTTPS trên cùng một tên máy chủ (ví dụ: *.devcổng.apigee.io).

Trong trường hợp này, nếu nhà phát triển đang truy cập cổng thông tin của bạn tại live-example.devportal.apigee.io nhưng cần truy cập vào một chứng chỉ đã tải lên cho live-example.devportal.apigee.io, thì yêu cầu sẽ không thành công.

// 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;
  }
}

Chuyển hướng sang HTTPS trên nhiều tên máy chủ

Thêm mã sau vào tệp sites/default/settings.local.php (cloud) hoặc tệp sites/default/settings.php (Đám mây riêng tư) để chuyển hướng đến tất cả lưu lượng truy cập cổng thông tin sang HTTPS trên nhiều tên máy chủ.

  // 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;
  }
}