포털에서 TLS 사용

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

TLS를 사용하도록 포털을 구성할 수 있습니다. 포털의 TLS 구성 절차는 포털을 배포한 방법에 따라 다릅니다.

  • 클라우드: 포털의 클라우드 기반 호스팅 서비스인 Pantheon 또는 Acquia의 TLS를 구성합니다.
  • Apigee Edge for Private Cloud: 포털을 호스팅하는 서버에서 TLS 온프레미스를 구성합니다.

TLS 및 포털

다음 이미지는 포털이 TLS를 사용하는 두 위치를 보여줍니다.

  1. 포털과 Edge Management API 간 통신용

    포털이 독립형 시스템으로 작동하지 않습니다. 대신 포털에서 사용되는 정보의 상당 부분이 실제로 Edge에 저장되며, 여기에서 Edge를 프라이빗 클라우드 설치로 클라우드 또는 온프레미스에 배포할 수 있습니다. 필요한 경우 포털은 Edge Management API에 HTTP 또는 HTTPS 요청을 수행하여 정보를 검색하거나 정보를 전송합니다.

    포털을 만들 때 가장 먼저 수행해야 하는 단계 중 하나는 Edge 관리 API의 URL을 지정하는 것입니다. Edge Management API의 구성 방식에 따라 URL이 TLS를 사용할 수 있습니다. 자세한 내용은 개발자 포털 만들기를 참고하세요.
  2. 개발자와 포털 간의 통신용입니다.

    개발자 서비스 포털을 사용하여 API를 배포하면 개발자가 포털에 로그인하여 앱을 등록하고 API 키를 받습니다. 로그인 사용자 인증 정보와 API 키는 보안을 위해 HTTPS를 통해 전송하려는 독점 정보입니다. 이러한 유형의 독점 정보는 HTTPS를 통해 전송해야 합니다.

    이 시나리오에서 TLS를 구성하는 방법은 포털을 배포한 방법(클라우드 또는 프라이빗 클라우드용 Apigee Edge)에 따라 다릅니다. 다음 섹션에서는 두 시나리오를 모두 설명합니다.

포털과 Edge Management API 간에 TLS 구성

Edge Management API의 구성은 통신에 TLS를 사용할 수 있는지 여부를 결정합니다. Edge 관리 API가 TLS를 사용하도록 구성된 경우 포털에서 HTTPS를 사용할 수 있습니다. 그렇지 않으면 포털이 HTTP를 통해 Edge와 통신합니다. 따라서 포털 개발자는 포털과 Edge 간의 연결을 설정하도록 Edge를 구성하는 방법만 알면 됩니다.

Edge 관리 API에 대한 연결을 구성하는 데 사용하는 절차는 개발자 포털 만들기를 참조하세요.

Edge의 클라우드 기반 버전

포털이 클라우드 기반 Edge 버전에 연결되면 Apigee에서 TLS를 사용하도록 에지 관리 API의 URL을 사전 구성합니다. 포털을 구성할 때 URL https://api.enterprise.apigee.com/v1을 사용하여 Edge 관리 API에 액세스합니다.

Edge의 프라이빗 클라우드 설치

Edge의 Private Cloud 설치의 경우 Edge Management API의 URL 형식은 다음과 같습니다.
http://EdgePrivateCloudIp:8080/v1
또는
https://EdgePrivateCloudIp:TLSport/v1

여기서 EdgePrivateCloudIp는 에지 관리 서버 서버의 IP 주소이고 TLSport는 Edge Management API의 TLS 포트입니다. 예를 들어 에지 구성에 따라 포트 번호는 8443 또는 8080일 수도 있습니다.

개발자와 포털 간 TLS 구성

개발자와 포털 간에 TLS를 구성하는 방법은 포털을 배포한 방법(클라우드 또는 프라이빗 클라우드용 Apigee Edge)에 따라 다릅니다.

클라우드 기반 포털

판테온

Pantheon은 Pantheon Global CDNLet's Encrypt를 사용하여 플랫폼의 모든 사이트에 무료로 자동화된 HTTPS를 제공합니다. Pantheon의 글로벌 CDN의 HTTPS도 참조하세요.

Acquia

Acquia를 사용하여 TLS/SSL을 사용 설정하려면 SSL 사용 설정을 참조하세요.

프라이빗 클라우드 포털용 Edge

포털에 Apigee에서 권장하는 프라이빗 클라우드를 모두 설치하려면 포털이 아래와 같이 부하 분산기 뒤에 있어야 합니다.

따라서 온프레미스 설치의 경우 TLS를 구성하는 데 두 가지 옵션이 있습니다.

  • 부하 분산기에서 TLS 구성: 포털이 아닌 부하 분산기 자체에서 TLS를 구성합니다. 따라서 TLS를 구성하는 데 사용하는 절차는 부하 분산기에 따라 다릅니다. 자세한 내용은 부하 분산기 문서를 참조하세요.
  • 포털 자체에서 TLS 구성: 필요한 경우 포털을 호스팅하는 웹 서버에서 TLS를 구성할 수 있습니다. 자세한 내용은 HTTPS를 사용하도록 포털 구성을 참고하세요.

포털을 프로덕션 환경에 배포하려면 먼저 자체 TLS 인증서를 가져와야 합니다.

추가 TLS 설정 구성

sites/default/settings.local.php (클라우드) 또는 sites/default/settings.php (프라이빗 클라우드) 파일을 수정하여 포털의 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_maxlifetimecookie_lifetime: (선택사항) gc_lifeteime은 데이터가 삭제될 수 있는 시간(초)을 지정하고 cookie_lifetime은 쿠키의 전체 기간을 초 단위로 지정합니다. 이러한 속성을 다음과 같이 설정합니다.

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

개발자 포털과 클라이언트 간에 TLS를 설정하는 방법에 대한 자세한 내용은 Pantheon 문서 사이트에서 보안 HTTPS 통신을 위한 SSL 사용을 참조하세요.

부하 분산기로 TLS 구성

성능 향상을 위해 TLS 종료를 수행하도록 부하 분산기가 구성되는 경우도 있습니다. TLS 종료를 사용하면 부하 분산기가 https://를 통해 전송된 메시지를 복호화하고 메시지를 http://를 통해 백엔드 서버로 전달합니다. 따라서 백엔드 서버에서 https:// 메시지 자체를 복호화하는 오버헤드가 방지됩니다.

부하 분산기가 암호화되지 않은 HTTP 메시지를 동일한 데이터 센터의 서버에 전달하는 경우 보안은 문제가 되지 않습니다. 하지만 부하 분산기가 http://를 통해 Apigee 개발자 포털과 같은 데이터 센터 외부의 서버로 메시지를 전달하는 경우 메시지가 암호화되지 않아 보안에 허점이 생기게 됩니다.

개발자 포털이 TLS 종료를 사용하는 부하 분산기 뒤에 있고 모든 트래픽을 https://를 통해 제공하려는 경우 웹사이트 페이지에 https:// 링크만 포함해야 하며 개발자 포털 sites/default/settings.local.php (클라우드) 또는 sites/default/settings.php (프라이빗 클라우드) 파일에 다음 코드를 추가해야 합니다. 부하 분산기는 HTML 페이지의 콘텐츠를 자동으로 변환하지 않으므로 코드는 클라이언트에 전달된 모든 링크가 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로 리디렉션

sites/default/settings.local.php (클라우드) 또는 sites/default/settings.php (프라이빗 클라우드) 파일을 업데이트하여 모든 포털 트래픽을 HTTPS로 리디렉션할 수 있습니다. 필요한 업데이트는 동일한 호스트 이름에서 HTTPS로 리디렉션하는지 또는 여러 호스트 이름에서 리디렉션하는지에 따라 달라집니다.

동일한 호스트 이름에서 HTTPS로 리디렉션

다음 코드를 sites/default/settings.local.php (클라우드) 또는 sites/default/settings.php (프라이빗 클라우드) 파일에 추가하여 동일한 호스트 이름의 모든 포털 트래픽으로 리디렉션합니다 (예: *.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 파일 (프라이빗 클라우드)에 추가하여 여러 호스트 이름에서 모든 포털 트래픽을 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;
  }
}