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

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

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

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

TLS và cổng thông tin

Hình ảnh sau đây cho thấy 2 vị trí mà cổng thông tin sử dụng TLS:

  1. Để giao tiếp giữa cổng thông tin và Edge Management API.

    Cổng thông tin này 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 thông tin 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 chỗ dưới dạng một bản cài đặt Đám mây riêng tư. Khi cần thiết, cổng thông tin sẽ đưa ra yêu cầu HTTP hoặc HTTPS đối với Edge Management API để 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 Edge Management API, URL đó có thể sử dụng TLS. Hãy xem bài viết Tạo cổng thông tin dành 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 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. Loại thông tin độc quyền 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: đá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 và API quản lý Edge

Cấu hình của API quản lý Edge sẽ xác định xem hoạt động giao tiếp có thể sử dụng TLS hay không. Nếu API quản lý Edge được định cấu hình để sử dụng TLS, thì cổng này có thể sử dụng HTTPS. Nếu không, cổng sẽ giao tiếp với Edge qua HTTP. Do đó, với tư cách là 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 mối kết nối giữa cổng thông tin và Edge.

Để biết quy trình bạn dùng để thiết lập mối kết nối với Edge Management API, hãy xem phần Tạo một cổng thông tin dành cho nhà phát triển.

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

Nếu cổng 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, bạn sẽ 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 chế độ cài đặt Đám mây riêng của Edge, URL của API quản lý Edge có dạng:
http://EdgePrivateCloudIp:8080/v1
hoặc:
https://EdgePrivateCloudIp:TLSport/v1

trong đó EdgePrivateCloudIp là địa chỉ IP của máy chủ Edge Management Server và TLSport 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 nhà phát triển và cổng

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

Cổng thông tin dựa trên đám mây

Pantheon

Pantheon cung cấp HTTPS tự động miễn phí cho tất cả cá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 HTTPS trên CDN toàn cầu của Pantheon.

Acquia

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

Cổng Edge cho Đám mây riêng tư

Tất cả các bản cài đặt Private Cloud được Apigee đề xuất cho cổng đều yêu cầu cổng phải nằm sau một bộ cân bằng tải, như minh hoạ bên dưới:

Do đó, đối với các bản cài đặt tại chỗ, bạn có 2 lựa 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. Do đó, quy trình bạn dùng để định cấu hình TLS sẽ phụ thuộc vào trình cân bằng tải. Hãy xem tài liệu về bộ cân bằng tải để 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. Hãy xem phần Đị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 lấy chứng chỉ TLS của riêng mình trước khi có thể triển khai cổng thông tin vào một môi trường sản xuất.

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

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

Khi chỉnh sửa tệp, hãy thêm các phiên bản 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ể thiết lập các thuộc tính sau trong tệp sites/default/settings.local.php (đám mây) hoặc sites/default/settings.php (Đám mây riêng):

  • cookie_httponly: (Nên dùng) Chỉ định rằng cookie chỉ có thể truy cập 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 các 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 thành:

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

    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 cổng thông tin dành cho nhà phát triển và các ứng dụng, hãy xem phần Bật SSL để giao tiếp HTTPS an toàn trên trang tài liệu của Pantheon.

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

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

Nếu bộ cân bằng tải chuyển tiếp các 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 xảy ra. Tuy nhiên, nếu bộ 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 cho nhà phát triển Apigee, thì các thông báo sẽ không được mã hoá, điều này sẽ tạo ra 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 các bộ cân bằng tải đang sử dụng tính năng 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 các đường liên kết https:// và bạn sẽ cần thêm mã sau vào tệp sites/default/settings.local.php (đám mây) hoặc sites/default/settings.php (Đám mây riêng) của cổng thông tin dành cho nhà phát triển. 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 mã này đảm bảo rằng tất cả các đường liên kết được truyền đến máy khách đều bắt đầu bằng https://.

Để định cấu hình TLS bằng bộ cân bằng tải, hãy thêm các dòng sau vào tệp sites/default/settings.local.php (đám mây) hoặc sites/default/settings.php (Đám mây riê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;

  // 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 đến HTTPS

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

Chuyển hướng đến 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 (đám mây) hoặc sites/default/settings.php (Đám mây riêng) để chuyển hướng tất cả lưu lượng truy cập cổng sang HTTPS trên cùng một tên máy chủ (ví dụ: *.devportal.apigee.io).

Trong trường hợp này, nếu một nhà phát triển đang truy cập vào 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ỉ đã được tải lên cho devportal.example.com, 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 đến HTTPS trên nhiều tên máy chủ

Thêm mã sau vào tệp sites/default/settings.local.php (đám mây) hoặc tệp sites/default/settings.php (Đám mây riêng) để chuyển hướng tất cả lưu lượng truy cập cổng 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;
  }
}