Utiliser le protocole TLS sur le portail

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Vous pouvez configurer le portail pour qu'il utilise TLS. Procédure de configuration TLS pour le portail dépend de la manière dont vous avez déployé le portail:

  • Cloud: configurez le protocole TLS à partir de Pantheon ou Acquia, la solution d'hébergement dans le cloud. pour le portail.
  • Apigee Edge pour Private Cloud: configurer le protocole TLS sur site sur le serveur qui héberge le portail.

TLS et le portail

L'image suivante montre les deux emplacements où le portail utilise TLS:

  1. Pour la communication entre le portail et l'API de gestion Edge.

    Le portail ne fonctionne pas comme un système autonome. Au lieu de cela, la plupart des informations utilisées par le portail est en fait stocké sur Edge, où ce dernier peut être déployé dans le cloud ou sur site en tant qu'installation de cloud privé. Si nécessaire, le portail effectue une requête HTTP ou HTTPS à l'API de gestion Edge pour récupérer des informations ou pour envoyer des informations.

    Lorsque vous créez votre portail, vous devez d'abord spécifier l'URL l'API de gestion Edge. Selon la configuration de l'API de gestion Edge, cette URL peuvent utiliser le protocole TLS. Voir la section Créer un portail des développeurs.
  2. Pour la communication entre les développeurs et le portail.

    Lorsque vous utilisez le portail de services pour les développeurs pour déployer vos API, vos développeurs se connectent au pour enregistrer des applications et recevoir des clés API. Les identifiants de connexion et la clé API des informations propriétaires que vous souhaitez envoyer via HTTPS pour garantir leur sécurité. Ce d'informations propriétaires doit être envoyé via HTTPS.

    La manière dont vous configurez TLS pour ce scénario dépend de la manière dont vous avez déployé le cloud ou Apigee Edge pour Private Cloud. Les sections suivantes décrivent les deux scénarios.

Configurer TLS entre le portail et l'API de gestion Edge

La configuration de l'API de gestion Edge détermine si la communication peut utiliser ou non TLS Si l'API de gestion Edge est configurée pour utiliser TLS, le portail peut utiliser HTTPS. Sinon, le portail communique avec Edge via HTTP. Par conséquent, en tant que développeur de portails, uniquement besoin de savoir comment Edge est configuré pour définir la connexion entre le portail et Périphérie.

Pour la procédure que vous utilisez pour configurer la connexion à l'API de gestion Edge, voir Créer un développeur portail.

Version cloud d'Edge

Si votre portail se connecte à la version cloud d'Edge, l'URL d'Edge l'API de gestion est préconfigurée par Apigee pour utiliser TLS. Lors de la configuration du portail, vous accédez API de gestion Edge à l'aide de l'URL https://api.enterprise.apigee.com/v1.

Installation d'Edge via le cloud privé

Pour une installation d'Edge sur le cloud privé, l'URL de l'API de gestion Edge se trouve dans le formulaire:
http://EdgePrivateCloudIp:8080/v1
ou:
https://EdgePrivateCloudIp:TLSport/v1

EdgePrivateCloudIp est l'adresse IP de la solution de gestion Serveur serveur et TLSport est le port TLS de l'API de gestion Edge. Par exemple, le numéro de port peut être 8443 ou même 8080, selon la configuration Edge.

Configuration du protocole TLS entre les développeurs et le portail

La manière dont vous configurez TLS entre les développeurs et le portail dépend de la manière dont vous avez déployé le cloud ou Apigee Edge pour Private Cloud.

Portails basés dans le cloud

Panthéon

Pantheon fournit sans frais le protocole HTTPS automatisé pour tous les sites de sa plate-forme via le CDN Pantheon Global CDN et à l'aide de Let's Encrypt. Consultez également la page HTTPS sur le CDN mondial de Pantheon.

Acquia

Pour activer TLS/SSL à l'aide d'Acquia, consultez la page Activer SSL.

Edge pour Private Portails cloud

Toutes les installations de cloud privé recommandées par Apigee du portail nécessitent que le portail soit derrière un équilibreur de charge, comme illustré ci-dessous:

Par conséquent, pour les installations sur site, vous disposez de deux options de configuration TLS:

  • Configurer TLS sur l'équilibreur de charge: configurez TLS sur l'équilibreur de charge. et non sur le portail. La procédure que vous utilisez pour configurer TLS dépend de l'équilibreur de charge. Pour en savoir plus, consultez la documentation sur votre équilibreur de charge des informations.
  • Configurer TLS sur le portail lui-même: si nécessaire, vous pouvez configurer TLS sur le serveur Web qui héberge le portail. Consultez la section Configuration du portail pour l'utilisation HTTPS pour en savoir plus.

Vous devez obtenir votre propre certificat TLS avant de pouvoir déployer le portail en production environnement.

Configurer paramètres TLS supplémentaires

Vous pouvez modifier le fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (mode privé Cloud) afin d'apporter des modifications à la configuration TLS pour le portail.

Lorsque vous modifiez le fichier, ajoutez des instances de la fonction ini_set() pour définir une propriété. Pour en savoir plus sur cette fonction, consultez la page http://php.net/manual/en/function.ini-set.php.

Vous pouvez définir les propriétés suivantes dans le fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (mode privé Cloud) :

  • cookie_httponly: (Recommandé) Indique que le cookie n'est accessible que via le protocole HTTP. Définir en tant que:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure - (facultatif) spécifie que les cookies ne peuvent être envoyés que via des connexions sécurisées. Toutefois, signifie que tout le contenu doit être diffusé via HTTPS. Si ce paramètre est activé, le site fonctionnent via HTTP. Définissez cette propriété comme:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime et cookie_lifetime: (Facultatif) gc_lifeteime spécifie le nombre de secondes après lesquelles les données peuvent potentiellement être nettoyées, et cookie_lifetime spécifie durée de vie du cookie en secondes. Définissez ces propriétés comme suit:

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

Pour plus d'informations sur la configuration du protocole TLS entre le portail des développeurs et les clients, consultez la section Activez SSL pour la communication HTTPS sécurisée sur le site de documentation Pantheon.

Configurer TLS avec des équilibreurs de charge

Pour optimiser les performances, des équilibreurs de charge sont parfois configurés pour effectuer une terminaison TLS. Avec la terminaison TLS, les équilibreurs de charge déchiffrent les messages envoyés via https:// et les transfèrent au backend via http://. Cela permet d'économiser aux serveurs backend la surcharge nécessaire au déchiffrement des messages https:// eux-mêmes.

Si les équilibreurs de charge transfèrent les messages HTTP non chiffrés aux serveurs d'un même centre de données, la sécurité n'est pas un problème. Toutefois, si les équilibreurs de charge transfèrent les messages via http:// aux serveurs situés en dehors des données tel que votre portail des développeurs Apigee, les messages ne sont pas chiffrés, ce qui ouvre une faille de sécurité.

Si votre portail des développeurs se trouve derrière des équilibreurs de charge utilisant la terminaison TLS et que vous que tout le trafic soit diffusé sur https://, les pages du site Web doivent ne contiennent que des liens https:// ; Vous devez ajouter le code suivant à votre portail des développeurs sites/default/settings.local.php (cloud) ou sites/default/settings.php (mode privé Cloud). Comme l'équilibreur de charge ne transforme pas automatiquement le contenu HTML, le code garantit que tous les liens transmis au client commencent par https://.

Pour configurer le protocole TLS avec des équilibreurs de charge, ajoutez les lignes suivantes au fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (mode privé Cloud) :

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

Pour en savoir plus, consultez les pages suivantes :

Redirection du trafic du portail vers HTTPS

Vous pouvez rediriger tout le trafic du portail vers HTTPS en mettant à jour vos pages sites/default/settings.local.php (cloud) ou sites/default/settings.php (mode privé Cloud). Les mises à jour requises varient selon que vous redirigez ou non vers HTTPS nom d'hôte ou plusieurs noms d'hôte.

Redirection vers HTTPS sur le même nom d'hôte

Ajoutez le code suivant à votre fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (Private Cloud) vers rediriger vers tout le trafic du portail vers HTTPS sur le même nom d'hôte (par exemple, *.devportal.apigee.io ).

Dans ce scénario, si un développeur visite votre portail à l'adresse live-example.devportal.apigee.io, mais que doit accéder à un certificat qui a été importé pour devportal.example.com, la requête échouer.

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

Redirection vers HTTPS sur plusieurs noms d'hôte

Ajoutez le code suivant à votre fichier sites/default/settings.local.php (cloud) ou fichier sites/default/settings.php (cloud privé) vers rediriger vers tout le trafic du portail vers HTTPS sur plusieurs noms d'hôte.

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