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 tuỳ 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, những 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 chỗ trên máy chủ lưu trữ cổng thông tin.

TLS và cổng

Hình ảnh sau đây hiển thị hai nơi cổng 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 dưới dạng 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. Tại đây, Edge có thể được triển khai trên đám mây hoặc tại chỗ dưới dạng một lượt cài đặt Đám mây riêng tư. Khi cần thiết, cổng thông tin sẽ gửi yêu cầu HTTP hoặc HTTPS tới 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 bài viết Bắt đầu xây dựng 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 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. 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 thông tin: cloud 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 xác định liệu hoạt động giao tiếp có thể 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 có thể sử dụng HTTPS. Nếu không, cổng sẽ giao tiếp với Edge qua HTTP. Do đó, 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 kết nối giữa cổng 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 Bắt đầu xây dựng 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 thông tin của bạn kết nối với phiên bản Edge dựa trên đám mây, thì URL của API quản lý Edge sẽ được Apigee định cấu hình trước để sử dụng TLS. Khi định cấu hình cổng thông tin, bạn truy cập API quản lý Edge bằng URL https://api.enterprise.apigee.com/v1.

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

Đối với quá trình cài đặt Private Cloud cho 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 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 phụ thuộc vào cách bạn triển khai cổng thông tin đó: đám mây hay Apigee Edge cho Đám mây riêng tư.

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

Patheon

Pantheon cung cấp HTTPS tự động miễn phí cho mọi 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.

Edge dành cho cổng thông tin Đá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 phải nằm sau một trình cân bằng tải, như minh hoạ dưới đây:

Do đó, đối với các bản cài đặt tại chỗ, 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 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 để 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. Theo mặc định, Apigee cài đặt máy chủ web Apache. Để biết thông tin về cách định cấu hình TLS cho Apache, hãy xem Bật HTTP an toàn (HTTPS)

Bạn phải lấy chứng chỉ TLS của riêng mình thì mới có thể triển khai cổng này sang môi trường sản xuất.

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

Bạn có thể chỉnh sửa tệp sites/default/settings.local.php (cloud) hoặc sites/default/settings.php (Đám mây riêng tư) để thay đổi cấu hình 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 thuộc tính. Để biết thêm thông tin về hàm này, hãy xem: ini_set.

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

  • 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 như:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure – (Không bắt buộc) Chỉ định rằng chỉ có thể gửi cookie 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, thì 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_maslifetimecookie_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 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 cổng thông tin dành cho nhà phát triển và ứng dụng, hãy xem phần Bật SSL để giao tiếp qua HTTPS bảo mật trên trang web tài liệu 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 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. Khi chấm dứt TLS, trình cân bằng tải sẽ giải mã thông báo được gửi qua https:// và chuyển tiếp những thông báo đó đến các máy chủ phụ trợ qua http://. Cách này giúp các máy chủ phụ trợ tiết kiệm chi phí 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 không phải là vấn đề. 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) thì thông báo đó sẽ không được mã hoá nên sẽ mở 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 sử dụ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 phân phát tất cả lưu lượng truy cập qua https://, thì các trang trên trang web sẽ chỉ cần chứa đường liên kết https:// và bạn cần thêm mã sau đây vào cổng sites/default/settings.local.php (đám mây) hoặc tệp sites/default/settings.php (Đám mây riêng tư) trong cổng thông tin dành cho nhà phát triển của mình. 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 chuyển đến ứng dụng đều bắt đầu bằng https://.

Để định cấu hình TLS với 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 sites/default/settings.php (Đám mây riêng tư):

// 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 vào cổng thông tin đến HTTPS bằng cách cập nhật tệp sites/default/settings.local.php (cloud) hoặc sites/default/settings.php (Đám mây riêng tư) của mình. Các bản cập nhật bắt buộc 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ủ.

Đang chuyển hướng tới 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 đến 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 nhà phát triển đang truy cập cổng của bạn tại live-example.devportal.apigee.io nhưng cần truy cập vào 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 tới HTTPS trên nhiều tên máy chủ

Hãy 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 tư) của bạn để chuyển hướng đến tất cả lưu lượng truy cập cổng thông tin tới 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;
  }
}