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. La 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, les services d'hébergement dans le cloud pour le portail.
  • Apigee Edge pour Private Cloud: configurez le protocole TLS sur site sur le serveur hébergeant le portail.
<ph type="x-smartling-placeholder">

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 sont en fait stockées sur Edge, où Edge peut être déployé dans le cloud ou sur site en tant qu'installation de cloud privé. Si nécessaire, le portail envoie 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, l'une des premières étapes à effectuer consiste à spécifier l'URL de l'API de gestion Edge. Selon la configuration de l'API de gestion Edge, cette URL peut utiliser TLS. Pour en savoir plus, consultez Commencer à créer votre 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 portail pour enregistrer des applications et recevoir des clés API. Les identifiants de connexion et la clé API sont des informations propriétaires que vous souhaitez envoyer via HTTPS pour garantir leur sécurité. Ce type 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 portail: cloud ou Apigee Edge pour Private Cloud. Les sections suivantes décrivent les deux scénarios.

Configuration de 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 TLS ou non. 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 portail, il vous suffit de savoir comment Edge est configuré pour définir la connexion entre le portail et Edge.

Pour la procédure que vous utilisez pour configurer la connexion à l'API de gestion Edge, voir Commencer à créer votre portail des développeurs.

Version cloud d'Edge

Si votre portail se connecte à la version cloud d'Edge, l'URL de l'API de gestion Edge est préconfigurée par Apigee pour utiliser TLS. Lors de la configuration du portail, vous accédez à l'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 présente sous la forme:
http://EdgePrivateCloudIp:8080/v1?
ou:
https://EdgePrivateCloudIp:TLSport/v1

EdgePrivateCloudIp est l'adresse IP du serveur Edge Management Server 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.

Configurer le 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 portail: 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, reportez-vous à la section Activer SSL.

Edge pour les portails Private Cloud

Toutes les installations de cloud privé recommandées par Apigee nécessitent que le portail se trouve derrière un équilibreur de charge, comme indiqué 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 lui-même, et non sur le portail. La procédure à suivre pour configurer TLS dépend donc de l'équilibreur de charge. Pour en savoir plus, consultez la documentation de votre équilibreur de charge.
  • Configurer TLS sur le portail lui-même: si nécessaire, vous pouvez configurer le protocole TLS sur le serveur Web qui héberge le portail. Par défaut, Apigee installe le serveur Web Apache. Pour plus d'informations sur la configuration de TLS pour Apache, consultez la section Activer HTTP Secure (HTTPS)

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

Configurer des paramètres TLS supplémentaires

Vous pouvez modifier le fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (cloud privé) pour modifier 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 section ini_set.

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

  • cookie_httponly (recommandé) : spécifie que le cookie n'est accessible que via le protocole HTTP. Définissez cette propriété comme suit:

    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, cela signifie que tout le contenu doit être diffusé via HTTPS. Si ce paramètre est activé, le site ne fonctionne pas en HTTP. Définissez cette propriété comme:

    ini_set('session.cookie_secure', true);
  • gc_maslifetime et cookie_lifetime (facultatif) : gc_lifeteime spécifie le nombre de secondes au bout duquel les données peuvent potentiellement être nettoyées, et cookie_lifetime indique la 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 en savoir plus sur la configuration du protocole TLS entre le portail des développeurs et les clients, consultez Activer SSL pour une 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 aux serveurs backend via http://. Ainsi, les serveurs backend n'ont pas à déchiffrer les messages https:// eux-mêmes.

Si les équilibreurs de charge transfèrent des messages HTTP non chiffrés aux serveurs d'un même centre de données, la sécurité ne pose pas de problème. Toutefois, si les équilibreurs de charge transfèrent les messages via http:// à des serveurs situés en dehors du centre de données, tels 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 une terminaison TLS et que vous souhaitez que tout le trafic soit diffusé via https://, les pages du site Web ne doivent contenir que des liens https:// et vous devrez ajouter le code suivant à votre portail des développeurs sites/default/settings.local.php (cloud) ou sites/default/settings.php (cloud privé). Comme l'équilibreur de charge ne transforme pas automatiquement le contenu des pages 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 (cloud privé) :

// 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 votre fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (cloud privé). Les mises à jour requises varient selon que vous redirigez vers HTTPS sur le même nom d'hôte ou sur 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 (cloud privé) pour rediriger l'ensemble du 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 qu'il a besoin d'accéder à un certificat qui a été importé pour devportal.example.com, la requête échoue.

// 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 au fichier sites/default/settings.php (cloud privé) pour rediriger l'ensemble du 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;
  }
}