TLS im Portal verwenden

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Sie können das Portal für die Verwendung von TLS konfigurieren. Das Verfahren für die TLS-Konfiguration des Portals hängt davon ab, wie Sie das Portal bereitgestellt haben:

  • Cloud: Konfigurieren Sie TLS über Pantheon oder Acquia, die cloudbasierten Hostingdienste für das Portal.
  • Apigee Edge for Private Cloud: Konfigurieren Sie TLS lokal auf dem Server, auf dem das Portal gehostet wird.

TLS und das Portal

In der folgenden Abbildung sind die beiden Orte zu sehen, an denen das Portal TLS verwendet:

  1. Für die Kommunikation zwischen dem Portal und der Edge-Verwaltungs-API.

    Das Portal funktioniert nicht als eigenständiges System. Stattdessen werden viele der vom Portal verwendeten Informationen tatsächlich in Edge gespeichert, wobei Edge entweder in der Cloud oder lokal als Private Cloud-Installation bereitgestellt werden kann. Bei Bedarf führt das Portal eine HTTP- oder HTTPS-Anfrage an die Edge Management API aus, um Informationen abzurufen oder zu senden.

    Wenn Sie Ihr Portal erstellen, müssen Sie zuerst die URL der Edge-Management-API angeben. Je nachdem, wie die Edge-Verwaltungs-API konfiguriert ist, kann diese URL TLS verwenden. Weitere Informationen finden Sie unter Entwicklerportal erstellen.
  2. Für die Kommunikation zwischen Entwicklern und dem Portal.

    Wenn Sie Ihre APIs über das Entwicklerdienstportal bereitstellen, melden sich Ihre Entwickler darin an, um Anwendungen zu registrieren und API-Schlüssel zu erhalten. Die Anmeldedaten und der API-Schlüssel sind geschützte Informationen, die Sie aus Sicherheitsgründen über HTTPS senden möchten. Diese Art von proprietären Informationen sollte über HTTPS gesendet werden.

    Wie Sie TLS für dieses Szenario konfigurieren, hängt davon ab, wie Sie das Portal bereitgestellt haben: Cloud oder Apigee Edge für Private Cloud. In den folgenden Abschnitten werden beide Szenarien beschrieben.

TLS zwischen dem Portal und der Edge Management API konfigurieren

Die Konfiguration der Edge-Verwaltungs-API bestimmt, ob die Kommunikation TLS verwenden kann oder nicht. Wenn die Edge-Verwaltungs-API für die Verwendung von TLS konfiguriert ist, kann das Portal HTTPS verwenden. Andernfalls kommuniziert das Portal über HTTP mit Edge. Daher müssen Sie als Portalentwickler nur wissen, wie Edge konfiguriert ist, um die Verbindung zwischen dem Portal und Edge einzurichten.

Das Verfahren, mit dem Sie die Verbindung zur Edge Management API konfigurieren, finden Sie unter Entwicklerportal erstellen.

Cloudbasierte Version von Edge

Wenn Ihr Portal eine Verbindung zur cloudbasierten Version von Edge herstellt, ist die URL für die Edge-Verwaltungs-API von Apigee für die Verwendung von TLS vorkonfiguriert. Bei der Konfiguration des Portals greifen Sie über die URL https://api.enterprise.apigee.com/v1 auf die Edge Management API zu.

Private Cloud-Installation von Edge

Bei einer Private Cloud-Installation von Edge hat die URL der Edge-Verwaltungs-API das Format:
http://EdgePrivateCloudIp:8080/v1
oder:
https://EdgePrivateCloudIp:TLSport/v1

Dabei ist EdgePrivateCloudIp die IP-Adresse des Edge Management Server-Servers und TLSport der TLS-Port für die Edge Management API. Beispielsweise kann die Portnummer je nach Edge-Konfiguration 8443 oder sogar 8080 lauten.

TLS zwischen Entwicklern und dem Portal konfigurieren

Wie Sie TLS zwischen Entwicklern und dem Portal konfigurieren, hängt davon ab, wie Sie das Portal bereitgestellt haben: Cloud oder Apigee Edge für Private Cloud.

Cloudbasierte Portale

Pantheon

Pantheon stellt über das Pantheon Global CDN und die Verwendung von Let's Encrypt kostenloses automatisiertes HTTPS für alle Websites auf seiner Plattform bereit. Siehe auch HTTPS im globalen CDN von Pantheon.

Acquia

Informationen zum Aktivieren von TLS/SSL mit Acquia finden Sie unter SSL aktivieren.

Edge für Private Cloud-Portale

Für alle von Apigee empfohlenen Private Cloud-Installationen des Portals muss sich das Portal hinter einem Load-Balancer befinden, wie unten dargestellt:

Daher haben Sie bei lokalen Installationen zwei Möglichkeiten zum Konfigurieren von TLS:

  • TLS auf dem Load-Balancer konfigurieren: Konfigurieren Sie TLS auf dem Load-Balancer selbst und nicht auf dem Portal. Das Verfahren, mit dem Sie TLS konfigurieren, hängt daher vom Load-Balancer ab. Weitere Informationen finden Sie in der Dokumentation zu Ihrem Load-Balancer.
  • TLS im Portal selbst konfigurieren: Bei Bedarf können Sie TLS auf dem Webserver konfigurieren, auf dem das Portal gehostet wird. Weitere Informationen finden Sie unter Portal für die Verwendung von HTTPS konfigurieren.

Sie müssen ein eigenes TLS-Zertifikat abrufen, bevor Sie das Portal in einer Produktionsumgebung bereitstellen können.

Zusätzliche TLS-Einstellungen konfigurieren

Sie können die Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) bearbeiten, um die TLS-Konfiguration für das Portal zu ändern.

Fügen Sie beim Bearbeiten der Datei Instanzen der Funktion ini_set() hinzu, um ein Attribut festzulegen. Weitere Informationen zu dieser Funktion finden Sie unter http://php.net/manual/en/function.ini-set.php.

Sie können in der Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) die folgenden Attribute festlegen:

  • cookie_httponly: (empfohlen) Gibt an, dass das Cookie nur über das HTTP-Protokoll zugänglich ist. Legen Sie dieses Attribut so fest:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure (optional): Gibt an, dass Cookies nur über sichere Verbindungen gesendet werden können. Das bedeutet jedoch, dass alle Inhalte über HTTPS bereitgestellt werden müssen. Wenn diese Einstellung aktiviert ist, funktioniert die Website nicht über HTTP. Legen Sie dieses Attribut so fest:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime und cookie_lifetime: (optional) gc_lifeteime gibt die Anzahl der Sekunden an, nach denen Daten möglicherweise bereinigt werden können, und cookie_lifetime gibt die Lebensdauer des Cookies in Sekunden an. Legen Sie diese Attribute so fest:

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

Weitere Informationen zum Einrichten von TLS zwischen dem Entwicklerportal und Clients finden Sie unter SSL für sichere HTTPS-Kommunikation aktivieren auf der Website des Pantheons.

TLS mit Load-Balancern konfigurieren

Zur Leistungsverbesserung werden Load-Balancer manchmal so konfiguriert, dass die Beendigung von TLS-Verbindungen ausgeführt wird. Mit der TLS-Beendigung entschlüsseln Load-Balancer Nachrichten, die über https:// gesendet wurden, und leiten sie über http:// an Back-End-Server weiter. Dies erspart den Back-End-Servern den Aufwand, https://-Nachrichten selbst zu entschlüsseln.

Wenn Load-Balancer unverschlüsselte HTTP-Nachrichten an Server im selben Rechenzentrum weiterleiten, stellt die Sicherheit kein Problem dar. Wenn Load-Balancer jedoch Nachrichten über http:// an Server außerhalb des Rechenzentrums weiterleiten, z. B. an Ihr Apigee-Entwicklerportal, sind die Nachrichten unverschlüsselt. Dies öffnet eine Sicherheitslücke.

Wenn sich Ihr Entwicklerportal hinter Load-Balancern mit TLS-Terminierung befindet und der gesamte Traffic über https:// bereitgestellt werden soll, müssen die Seiten der Website nur https://-Links enthalten und Sie müssen den folgenden Code in die Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) einfügen. Da der Load-Balancer den Inhalt der HTML-Seiten nicht automatisch umwandelt, sorgt der Code dafür, dass alle an den Client übergebenen Links mit https:// beginnen.

Fügen Sie der Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) die folgenden Zeilen hinzu, um TLS mit Load-Balancern zu konfigurieren:

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

Weitere Informationen finden Sie unter:

Portal-Traffic zu HTTPS weiterleiten

Sie können den gesamten Portal-Traffic zu HTTPS weiterleiten, indem Sie die Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) aktualisieren. Welche Aktualisierungen erforderlich sind, hängt davon ab, ob Sie für denselben oder mehrere Hostnamen zu HTTPS weiterleiten.

Weiterleitung zu HTTPS mit demselben Hostnamen

Fügen Sie der Datei sites/default/settings.local.php (Cloud) bzw. sites/default/settings.php (Private Cloud) den folgenden Code hinzu, um den gesamten Portaltraffic zu HTTPS unter demselben Hostnamen (z. B. *.devportal.apigee.io) weiterzuleiten.

Wenn ein Entwickler in diesem Szenario Ihr Portal unter live-example.devportal.apigee.io besucht, aber auf ein Zertifikat zugreifen muss, das für devportal.example.com hochgeladen wurde, schlägt die Anfrage fehl.

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

Bei mehreren Hostnamen zu HTTPS weiterleiten

Fügen Sie der Datei sites/default/settings.local.php (Cloud) oder sites/default/settings.php (Private Cloud) den folgenden Code hinzu, um den gesamten Portaltraffic zu HTTPS bei mehreren Hostnamen weiterzuleiten.

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