Utiliser le protocole TLS sur le portail

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Vous pouvez configurer le portail pour qu'il utilise le protocole TLS. La procédure de configuration du protocole 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 basés sur le cloud pour le portail.
  • Apigee Edge pour Cloud privé: configurez TLS sur site sur le serveur hébergeant 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, une grande partie 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 ou 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 le protocole TLS. Pour en savoir plus, consultez 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 Services pour les développeurs pour déployer vos API, vos développeurs s'y connectent 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 le protocole HTTPS.

    La façon 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 Cloud privé. Les sections suivantes décrivent ces 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 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 portail, il vous suffit de savoir comment Edge est configuré pour définir la connexion entre le portail et Edge.

Pour connaître la procédure à suivre pour configurer la connexion à l'API de gestion Edge, consultez la section Créer un 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 sur le cloud privé de Edge

Pour une installation de cloud privé d'Edge, l'URL de l'API de gestion Edge se présente sous la forme suivante:
http://EdgePrivateCloudIp:8080/v1

ou:
https://EdgePrivateCloudIp:TLSport/v1

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

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

La manière dont vous configurez le protocole 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 le cloud privé.

Portails cloud

Pantheon

Pantheon fournit un service HTTPS automatisé sans frais à tous les sites de sa plate-forme par le biais du CDN Pantheon Global et à l'aide de Let's Encrypt. Voir également HTTPS sur le CDN mondial de Pantheon.

Acquia

Pour activer TLS/SSL à l'aide d'Acquia, reportez-vous à la section Activer SSL.

Portails de cloud privé Edge for Private Cloud

Toutes les installations de cloud privé recommandé par Apigee du portail 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 pour configurer 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 que vous utilisez pour configurer TLS dépend donc de l'équilibreur de charge. Pour en savoir plus, consultez la documentation relative à votre équilibreur de charge.
  • Configurez TLS sur le portail lui-même: si nécessaire, vous pouvez le configurer sur le serveur Web qui héberge le portail. Pour en savoir plus, consultez la section Configurer le portail pour utiliser 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 du protocole 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 (cloud privé) :

  • cookie_httponly (recommandé) : spécifie que le cookie est accessible uniquement 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 fonctionnera pas via HTTP. Définissez cette propriété comme suit:

    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 être nettoyées, et cookie_lifetime spécifie 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 la communication HTTPS sécurisée sur le site de documentation Pantheon.

Configurer TLS avec des équilibreurs de charge

Pour de meilleures performances, les é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é n'est pas un problème. Toutefois, si les équilibreurs de charge transfèrent des messages via http:// à des serveurs externes au centre de données, tels que votre portail des développeurs Apigee, les messages ne sont pas chiffrés, ce qui entraîne une faille de sécurité.

Si votre portail des développeurs se trouve derrière des équilibreurs de charge qui utilisent une terminaison TLS et que vous souhaitez que tout le trafic soit acheminé via le protocole https://, les pages des sites Web ne doivent contenir que des liens https://. Vous devez également ajouter le code suivant à votre fichier sites/default/settings.local.php (cloud) ou sites/default/settings.php (cloud privé). Étant donné que 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 :

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 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 sur live-example.devportal.apigee.io, mais doit accéder à un certificat qui a été importé pour devportal.example.com, la requête échouera.

// 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 sites/default/settings.php (cloud privé) pour 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;
  }
}