Configurer le protocole TLS pour l'API BaaS

Edge pour Private Cloud v. 4.17.01

TLS (Transport Layer Security, dont SSL est le prédécesseur) est la technologie de sécurité standard pour assurer la messagerie sécurisée et chiffrée dans l'environnement de votre API. Vous pouvez configurer TLS sur les nœuds du portail API BaaS et de la pile API BaaS.

L'image suivante montre un schéma de déploiement type pour l'API BaaS avec un seul nœud de portail BaaS et trois nœuds de pile API BaaS.

Les développeurs utilisent un navigateur pour envoyer des requêtes au portail. Par défaut, les requêtes utilisent le protocole HTTP sur le port 9000 du nœud du portail.

Ce déploiement inclut un équilibreur de charge entre les nœuds du portail et de la pile. Dans cette configuration, le portail envoie des requêtes HTTP à l'équilibreur de charge, qui transmet ensuite les requêtes à l'un des nœuds de la pile. Il s'agit de l'environnement de déploiement recommandé pour un système de production.

Options de configuration TLS

Lorsque vous configurez TLS pour API BaaS, plusieurs options s'offrent à vous:

  • Configurer TLS sur le portail et sur l'équilibreur de charge pour les nœuds de pile

    Dans cette configuration, les développeurs utilisent le protocole HTTPS pour accéder au portail, et le portail exécuté dans le navigateur utilise HTTPS pour envoyer des requêtes aux nœuds de pile via l'équilibreur de charge. L'équilibreur de charge utilise HTTP pour accéder aux nœuds de la pile.
  • Configurer TLS sur le portail, l'équilibreur de charge et les nœuds de pile

    Pour plus de sécurité, configurez l'équilibreur de charge pour qu'il utilise TLS pour accéder aux nœuds de pile.
  • Configurer TLS sur le portail et sur un seul nœud de pile

    Dans un petit environnement, comme un environnement de test ou de développement, vous ne disposez peut-être que d'un seul nœud de pile. Il n'est donc pas nécessaire d'inclure un équilibreur de charge. Dans cette configuration, configurez TLS à la fois sur le portail et les nœuds de pile.
  • Configurer TLS sur un équilibreur de charge pour le portail

    Une option non présentée ci-dessus consiste à utiliser un équilibreur de charge devant le nœud du portail. Dans cette configuration, vous pouvez configurer TLS sur l'équilibreur de charge et éventuellement sur la connexion entre l'équilibreur de charge et le portail.

Vérifier que le port TLS est ouvert

Les procédures ci-dessous configurent TLS sur le port par défaut du portail (9000) et du nœud de pile (8080). Toutefois, vous pouvez modifier ce port si vous le souhaitez.

Quel que soit le port que vous utilisez, vous devez vous assurer qu'il est ouvert sur le nœud. Par exemple, vous pouvez utiliser la commande suivante pour ouvrir le port 8443:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

Configurer TLS sur la pile API BaaS

Par défaut, TLS est désactivé pour la pile BaaS API. Vous accédez ensuite à l'API BaaS via HTTP à l'aide de l'adresse IP ou du nom DNS du nœud Stack et du port 8080. Exemple :

http://stack_IP:8080

Vous pouvez également configurer l'accès TLS à l'API BaaS afin d'y accéder sous la forme suivante:

https://stack_IP:8080

Dans cet exemple, vous configurez l'accès TLS pour utiliser le port 8080. Toutefois, le port 8080 n'est pas obligatoire. Vous pouvez configurer la pile pour qu'elle utilise un autre port. La seule exigence est que votre pare-feu autorise le trafic sur le port spécifié.

La pile ne peut accepter qu'un seul type de requête (HTTP ou HTTPS) sur un seul port. Par conséquent, si vous configurez un accès HTTPS sur le port 8080, vous ne pouvez pas utiliser HTTP pour accéder au port 8080. Si vous configurez la pile pour qu'elle utilise le port 8443 avec HTTPS, elle n'écoutera plus sur le port 8080.

Pour configurer l'accès TLS à la pile, procédez comme suit:

  1. Générez le fichier JKS du keystore contenant votre certification TLS et votre clé privée. Pour en savoir plus, consultez la section Configurer TLS/SSL pour Edge sur site.
    Remarque: Assurez-vous que les mots de passe utilisés pour le keystore et pour la clé sont identiques.
  2. Copiez le fichier JKS du keystore dans un répertoire du nœud de pile, tel que /opt/apigee/customer/application. Le répertoire doit être accessible à l'utilisateur "apigee".
  3. Attribuez la propriété du fichier JKS à l'utilisateur "apigee" :
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    keystore.jks est le nom de votre fichier keystore.
  4. Modifiez le fichier /opt/apigee/customer/application/usergrid.properties pour définir les propriétés suivantes, y compris le chemin d'accès au fichier JKS et le mot de passe du keystore et de la clé. Si ce fichier n'existe pas, créez-le:
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # Par défaut, l'accès TLS utilise le port 8080.
    # Utilisez cette propriété pour spécifier un autre port.
    # tomcat-server_port=8080


    Avertissement: La valeur password doit être en texte clair. Vous devez donc protéger usergrid.properties contre tout accès non autorisé.

    Utilisez la propriété tomcat-server_keyalias pour spécifier l'alias du keystore. Vous avez défini l'alias de clé au moment de sa création. Par exemple, vous pouvez le définir à l'aide de l'option -alias de la commande keytool.

    Utilisez tomcat-server_ssl.protocols pour définir les protocoles TLS compatibles avec la pile. Pour obtenir la liste des protocoles compatibles avec Java 8, consultez la page http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename.
  5. Configurez le nœud de pile:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. Redémarrez la pile BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. Vérifiez que TLS fonctionne en exécutant la commande cURL suivante sur le nœud de pile à l'aide de HTTPS:
    > curl -k https://localhost:8080/status -v

    Si TLS est configuré correctement, vous devriez obtenir une réponse contenant des informations d'état.

    Si vous avez configuré l'accès TLS sur un port autre que 8080, modifiez la commande ci-dessus pour utiliser le port approprié.
  8. Répétez l'opération sur tous les nœuds de la pile.
  9. Si vous disposez d'un équilibreur de charge devant les nœuds de pile, configurez-le pour qu'il envoie des requêtes aux nœuds de pile via HTTPS. Pour en savoir plus, consultez la documentation de votre équilibreur de charge.

    Si le portail envoie des requêtes directes à la pile, configurez-le pour qu'il accède à la pile via HTTPS, comme décrit dans la section suivante.
  10. Suivez la procédure ci-dessous dans "Configurer les nœuds de la pile BaaS de l'API pour TLS sur la pile ou le portail" afin de vous assurer que le nœud de pile dispose des URL TLS appropriées lors de la génération de réponses des utilisateurs.

Configurer le portail pour qu'il accède à la pile via TLS

Le portail BaaS exécuté dans un navigateur fonctionne en effectuant des appels d'API à la pile BaaS. Si vous configurez la pile BaaS pour utiliser le protocole TLS, vous devez également configurer le portail pour effectuer ces appels via HTTPS.

Une installation de BaaS d'API est généralement configurée pour:

  • Utiliser un équilibreur de charge entre le portail et les nœuds de pile

    Configurez l'équilibreur de charge pour qu'il envoie des requêtes aux nœuds de pile via HTTPS. Pour en savoir plus, consultez la documentation de votre équilibreur de charge.

    Dans cette configuration, le portail peut accéder à l'équilibreur de charge via HTTP ou HTTPS, en fonction de la configuration de l'équilibreur de charge. Si l'équilibreur de charge utilise TLS, suivez la procédure ci-dessous pour configurer le portail afin qu'il envoie des requêtes à l'équilibreur de charge HTTPS.
  • Demander au portail d'envoyer des requêtes directes à la pile

    Configurez le portail pour qu'il accède à la pile via HTTPS, comme décrit ci-dessous.

Suivez la procédure ci-dessous pour configurer le portail API BaaS afin d'effectuer des appels d'API via HTTPS:

  1. Configurez l'accès TLS sur la pile BaaS comme décrit ci-dessus ou sur l'équilibreur de charge pour les nœuds de la pile, comme décrit dans la documentation de votre équilibreur de charge.
  2. Modifiez /opt/apigee/customer/application/portal.properties pour définir la propriété suivante. Si ce fichier n'existe pas, créez-le:
    baas.portal.config.overrideUrl=https://stackIP:port

    Indiquez comme valeur de cette propriété l'adresse IP ou le nom DNS et le port du nœud de la pile API pour une installation à nœud unique, ou de l'équilibreur de charge si vous en avez un devant les nœuds de la pile BaaS API.
  3. Configurez le nœud du portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Redémarrez le portail à l'aide de la commande:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. Si vous avez utilisé un certificat autosigné lors de la configuration de l'accès TLS à la pile ci-dessus, il est possible que votre navigateur n'autorise pas les requêtes envoyées à la pile à partir du portail. Si une erreur s'affiche dans le navigateur indiquant que l'accès HTTPS à la pile n'est pas autorisé, demandez l'URL suivante dans votre navigateur et ajoutez une exception de sécurité pour autoriser l'accès:
    https://stackIP:port/status

    Indiquez l'adresse IP ou le nom DNS et le port du nœud de pile d'API ou de l'équilibreur de charge.

Configurer TLS sur le portail API BaaS

Par défaut, les utilisateurs accèdent au portail en envoyant des requêtes HTTP non chiffrées via le port 9000 sur le serveur du portail. Vous pouvez configurer le portail pour qu'il utilise HTTPS afin de chiffrer les données envoyées vers et depuis le portail.

Par défaut, vous accédez au portail via HTTP à l'aide de l'adresse IP ou du nom DNS du nœud du portail et du port 9000. Exemple :

http://portal_IP:9000

Vous pouvez également configurer l'accès TLS au portail afin d'y accéder sous la forme suivante:

https://portal_IP:9443

Dans cet exemple, vous configurez l'accès TLS pour qu'il utilise le port 9443. Toutefois, le port 9443 n'est pas obligatoire. Vous pouvez configurer le portail pour qu'il utilise un autre port.

Le portail ne peut accepter qu'un seul type de requête (HTTP ou HTTPS) sur un seul port. Par conséquent, si vous configurez l'accès HTTPS sur le port 9000, vous ne pouvez pas utiliser HTTP pour y accéder. Si vous configurez le portail pour qu'il utilise le port 9443 avec HTTPS, il n'écoutera plus sur le port 9000.

Pour configurer TLS pour le portail:

  1. Créez un fichier de clé et un fichier de certificat au format PEM.
    Remarque: Assurez-vous qu'aucun mot de passe/phrase secrète n'est associé à la clé ou au certificat.
  2. Copiez les fichiers PEM dans un répertoire du nœud du portail, tel que /opt/apigee/customer/application. Le répertoire doit être accessible à l'utilisateur "apigee".
  3. Remplacez la propriété des fichiers PEM par l'utilisateur "apigee" :
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. Modifiez le fichier /opt/apigee/customer/application/portal.properties pour définir les propriétés suivantes. Si ce fichier n'existe pas, créez-le:
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # Par défaut, l'accès TLS utilise le port 9000.
    # Utilisez cette propriété pour spécifier un autre port.
    # baas.portal.listen=9000


    Utilisez baas.portal.ssl.protocols pour définir les protocoles TLS compatibles avec le portail. Pour obtenir la liste des protocoles compatibles, consultez la liste des noms de protocoles SSL définis par Nginx: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols.
  5. Configurez le nœud du portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Redémarrez le portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. Suivez la procédure ci-dessous dans la section "Configurer les nœuds de la pile BaaS API pour TLS sur la pile ou le portail" pour vous assurer que le nœud de la pile dispose de l'URL TLS appropriée pour le portail.

Configurer les nœuds API BaaS pour TLS sur la pile ou le portail

Si vous incluez un équilibreur de charge devant les nœuds de pile ou de portail, ou si vous activez TLS directement sur le nœud de portail ou de pile, vous devez configurer les nœuds avec les URL appropriées pour accéder à la pile et au portail. Par exemple, les nœuds de pile ont besoin de ces informations lorsque:

  • Inclure une URL dans les réponses des requêtes d'API BaaS
  • Ajouter des liens dans les modèles d'e-mails lors de la réinitialisation d'un mot de passe ou de l'envoi d'autres notifications
  • Rediriger les utilisateurs vers des pages spécifiques du portail.

Si vous utilisez un équilibreur de charge devant les nœuds de pile ou si vous configurez TLS sur le nœud de pile, définissez la propriété suivante dans /opt/apigee/customer/application/usergrid.properties:

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

Remplacez http://localhost:8080 par l'URL de l'équilibreur de charge. Si l'équilibreur de charge est configuré pour utiliser TLS, utilisez le protocole HTTPS. Vous n'avez besoin d'inclure le port que si vous utilisez un port non standard, c'est-à-dire autre que le port 80 pour HTTP et le port 443 pour HTTPS.

Vous devez également définir la propriété suivante dans /opt/apigee/customer/application/portal.properties si vous utilisez un équilibreur de charge devant les nœuds de la pile:

baas.portal.config.overrideUrl=http://localhost:8080

Remplacez http://localhost:8080 par l'URL de l'équilibreur de charge de la pile.

Si vous utilisez un équilibreur de charge devant le nœud du portail ou configurez TLS sur le nœud de la pile, définissez les propriétés suivantes dans usergrid.properties:

usergrid-deployment_portal.url=http://localhost:9000

Remplacez http://localhost:9000 par l'URL de l'équilibreur de charge. Si l'équilibreur de charge est configuré pour utiliser TLS, utilisez le protocole HTTPS. Vous ne devez inclure le port que si vous utilisez un port non standard, c'est-à-dire autre que le port 80 pour HTTP et le port 443 pour HTTPS.

Après avoir modifié usergrid.properties:

  1. Configurez le nœud de pile:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  2. Redémarrez la pile BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. Si vous avez modifié portal.properties, configurez le nœud du portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Redémarrez le portail BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart