Configurer le protocole TLS pour l'API BaaS

Edge pour Private Cloud version 4.16.09

Le protocole TLS (Transport Layer Security), dont le prédécesseur est SSL, est la technologie de sécurité standard permettant de garantir la sécurité et le chiffrement d'une messagerie dans votre environnement d'API. Vous pouvez configurer TLS sur le portail BaaS de l'API et sur les nœuds de pile BaaS de l'API.

L'image suivante illustre un schéma de déploiement type d'API BaaS avec un seul nœud de portail BaaS et trois nœuds de pile d'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 de portail.

Ce déploiement comprend un équilibreur de charge entre les nœuds de portail et de pile. Dans cette configuration, le portail envoie des requêtes HTTP à l'équilibreur de charge, qui les transfère ensuite à l'un des nœuds de 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 l'API BaaS, plusieurs options s'offrent à vous:

  • Configurez 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, tandis que 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 le protocole HTTP pour accéder aux nœuds de pile.
  • Configurez TLS sur le portail, l'équilibreur de charge et les nœuds de pile

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

    Dans un environnement de petite taille, comme un environnement de test ou de développement, il est possible que vous n'ayez qu'un seul nœud de pile. Il n'est donc pas nécessaire d'inclure un équilibreur de charge. Dans cette configuration, configurez TLS sur les nœuds de portail et de pile.
  • Configurez 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 de 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.

Assurez-vous que le port TLS est ouvert

Les procédures ci-dessous permettent de configurer le protocole TLS sur le port de portail par défaut 9000 et le 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 BaaS de l'API

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

http://stack_IP:8080

Vous pouvez également configurer l'accès TLS à l'API BaaS afin de pouvoir 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 requis. Vous pouvez configurer la pile pour qu'elle utilise un autre port. La seule condition requise 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 l'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.

Procédez comme suit pour configurer l'accès TLS à la pile:

  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 le mot de passe sur le keystore et celui sur 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. Changez 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
    # Utilisez cette propriété pour spécifier un autre port.
    # tomcat-server_port=8080


    Avertissement: La valeur password doit être en texte clair. Par conséquent, vous devez protéger usergrid.properties contre les accès non autorisés.

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

    Définissez les protocoles TLS acceptés par la pile à l'aide de tomcat-server_ssl.protocols. 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. Déployez les modifications sur Tomcat:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  7. Redémarrez la pile BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  8. Vérifiez que le protocole TLS fonctionne en exécutant la commande cURL suivante sur le nœud de pile à l'aide du protocole HTTPS:
    > curl -k https://localhost:8080/status -v

    Si TLS est correctement configuré, vous devriez obtenir une réponse contenant des informations sur l'é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é.
  9. Répétez l'opération sur tous les nœuds de pile.
  10. Si vous disposez d'un équilibreur de charge devant les nœuds de pile, configurez-le pour envoyer 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.
  11. Suivez la procédure ci-dessous dans "Configurer les nœuds de 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 utilisateur.

Configurer le portail pour accéder à la pile via TLS

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

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

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

    Configurez l'équilibreur de charge pour envoyer 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, selon la manière dont vous le configurez. Si l'équilibreur de charge utilise le protocole TLS, suivez la procédure ci-dessous pour configurer le portail afin d'envoyer des requêtes à l'équilibreur de charge HTTPS.
  • Demandez 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.

Pour configurer le portail BaaS d'API afin d'effectuer des appels d'API via HTTPS, procédez comme suit:

  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 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

    Spécifiez comme valeur de cette propriété l'adresse IP ou le nom DNS et le port du nœud de pile d'API pour une installation à nœud unique, ou de l'équilibreur de charge si vous disposez d'un équilibreur de charge devant les nœuds de pile BaaS de l'API.
  3. Configurez le nœud de portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Redémarrez le portail à l'aide de la commande suivante:
    > /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 adressées à la pile depuis le portail. Si le navigateur affiche une erreur 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

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

Configuration de TLS sur le portail BaaS de l'API

Par défaut, les utilisateurs accèdent au portail en effectuant 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 pour 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 de portail et du port 9000. Exemple :

http://portal_IP:9000

Vous pouvez également configurer l'accès TLS au portail pour y accéder via le formulaire:

https://portal_IP:9443

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

Le portail n'accepte 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 accéder au port 9000. Si vous configurez le portail pour qu'il utilise le port 9443 avec HTTPS, il n'écoutera plus sur le port 9000.

Pour configurer le protocole TLS pour le portail:

  1. Créez un fichier de clé et un fichier de certificat au format PEM.
    Remarque: Assurez-vous qu'il n'y a pas de mot de passe/phrase secrète sur la clé ou le certificat.
  2. Copiez les fichiers PEM dans un répertoire du nœud de portail, par exemple /opt/apigee/customer/application. Le répertoire doit être accessible à l'utilisateur "apigee".
  3. Changez la propriété des fichiers PEM à 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


    # 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 acceptés par 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 de portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Déployez la configuration:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  7. Redémarrez le portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  8. Suivez la procédure ci-dessous dans "Configurer les nœuds de pile TLS de l'API pour TLS sur la pile ou le portail" afin de vous assurer que le nœud de pile dispose de l'URL TLS appropriée pour le portail.

Configurer des nœuds BaaS d'API pour TLS dans la pile ou le portail

Si vous incluez un équilibreur de charge devant les nœuds de la pile ou du 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 cette information lorsque:

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

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

usergrid-deployment_swagger.basepath=http://localhost:8080
usergrid-deployment_usergrid.organization.activation.url=http://localhost:8080/management/organizations/%s/activate
usergrid-deployment_usergrid.admin.activation.url=http://localhost:8080/management/users/%s/activate
usergrid-deployment_usergrid.admin.resetpw.url=http://localhost:8080/management/users/%s/resetpw
usergrid-deployment_usergrid.admin.confirmation.url=http://localhost:8080/management/users/%s/confirm
usergrid-deployment_usergrid.user.activation.url=http://localhost:8080/%s/%s/users/%s/activate
usergrid-deployment_usergrid.user.confirmation.url=http://localhost:8080/%s/%s/users/%s/confirm
usergrid-deployment_usergrid.user.resetpw.url=http://localhost:8080/%s/%s/users/%s/resetpw

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 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.

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 pile:

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

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

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

usergrid-deployment_usergrid.view.management.organizations.organization.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.organizations.organization.confirm=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.confirm=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 un port 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. Déployez les modifications sur Tomcat:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  3. Redémarrez la pile BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  4. Si vous avez modifié portal.properties, configurez le nœud du portail:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  5. Déployez les modifications:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  6. Redémarrez le portail BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart