Configurer l'accès TLS à une API pour le cloud privé

Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.
info

Un hôte virtuel sur Edge définit les domaines et les ports sur lesquels un proxy d'API est exposé et, par extension, l'URL que les applications utilisent pour accéder à un proxy d'API.

Un hôte virtuel définit également si le proxy d'API est accessible à l'aide du protocole HTTP ou par le protocole HTTPS chiffré qui utilise TLS. Lorsque vous configurez un hôte virtuel pour utiliser HTTPS et TLS, vous créez un hôte virtuel sur Edge et le configurez pour qu'il utilise un keystore et un truststore.

En savoir plus :

Éléments nécessaires à la création d'un hôte virtuel

Avant de créer un hôte virtuel, vous devez disposer des informations suivantes :

  • Nom de domaine public de l'hôte virtuel. Par exemple, vous devez savoir si le nom public est api.myCompany.com, myapi.myCompany.com, etc. Ces informations sont utilisées lorsque vous créez l'hôte virtuel, ainsi que lorsque vous créez l'enregistrement DNS pour l' hôte virtuel.
  • Pour le protocole TLS unidirectionnel, vous devez créer un keystore contenant les éléments suivants :
    • Certificat TLS : certificat signé par une autorité de certification (CA) ou chaîne de certificats dans laquelle le dernier certificat est signé par une autorité de certification.
    • Clé privée : Edge accepte les tailles de clé allant jusqu'à 2 048 bits. Une phrase secrète est facultative.
  • Pour le protocole TLS bidirectionnel, vous avez besoin d'un keystore et d'un truststore pour stocker le certificat du client et, éventuellement, la chaîne d'autorité de certification du certificat. Vous avez besoin du truststore même si le certificat est signé par une autorité de certification.

Pour en savoir plus sur la création de keystores et de truststores, consultez Keystores and Truststores.

Configuration de l'hôte virtuel pour TLS

Pour créer un hôte virtuel, créez un objet XML qui le définit. L'objet XML suivant utilise l'élément <SSLInfo> pour définir un hôte virtuel pour une configuration TLS unidirectionnelle via HTTPS :

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

Dans cet exemple, l'élément <Enabled> est défini sur "true" pour activer le protocole TLS unidirectionnel, et les éléments <KeyStore> et <KeyAlias> spécifient le keystore et la clé utilisés par la connexion TLS.

Pour activer le protocole TLS bidirectionnel, définissez l'élément <ClientAuthEnabled> sur true, et spécifiez un truststore à l'aide de l'élément <TrustStore>. Le truststore contient le certificat du client et, éventuellement, la chaîne d'autorité de certification du certificat.

Choisir comment spécifier le nom du keystore et du truststore dans l'hôte virtuel

Dans l'exemple d'hôte virtuel ci-dessus, vous avez spécifié le keystore à l'aide d'une référence. Une référence est une variable contenant le nom du keystore, qui évite de spécifier directement le nom du keystore.

L'avantage d'utiliser une référence est que vous pouvez modifier la valeur de la référence afin de changer le keystore utilisé par l'hôte virtuel, généralement en cas d'expiration prochaine du certificat du keystore actuel. Modifier la valeur de la référence ne vous oblige pas à redémarrer le routeur Edge.

Vous pouvez également utiliser un nom de keystore littéral dans l'hôte virtuel. Toutefois, si vous modifiez l'hôte virtuel pour changer le nom du keystore, vous devez redémarrer les routeurs Edge.

Restrictions liées à l'utilisation des références aux keystores et au truststore

Vous devez tenir compte de la restriction suivante lorsque vous utilisez des références à des keystores et des truststores :

  • Vous ne pouvez utiliser des références keystore et truststore dans des hôtes virtuels que si vous êtes compatible avec SNI et que vous interrompez le protocole SSL sur les routeurs Apigee.
  • Si un équilibreur de charge est placé devant les routeurs Apigee et que vous interrompez le protocole TLS sur le équilibreur de charge, vous ne pouvez pas utiliser les références keystore et truststore dans les hôtes virtuels.

Modifier un hôte virtuel existant pour utiliser des références au keystore et au truststore

Apigee vous recommande vivement d'utiliser des références aux keystores et aux truststores dans les hôtes virtuels. Les références vous permettent de modifier le keystore et le truststore utilisés par l'hôte virtuel sans avoir à redémarrer les routeurs Edge.

Si vos hôtes virtuels sont actuellement configurés pour utiliser le nom littéral du keystore ou truststore, vous pouvez les convertir pour qu'ils utilisent des références. Pour ce faire, mettez à jour l'hôte virtuel pour qu'il utilise des références, puis redémarrez les routeurs Edge.

Définir les algorithmes de chiffrement et les protocoles TLS pour Edge 4.15.07 et versions antérieures

Si vous utilisez Edge version 4.15.07 ou antérieure, vous définissez le protocole TLS et les algorithmes de chiffrement utilisés par l'hôte virtuel à l'aide des tags enfants <Ciphers> et <Protocols> du tag <SSLInfo>. Ces tags sont décrits dans le tableau ci-dessous.

Exemple :

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

Le <Cipher> tag utilise le nom Java et JSSE de l'algorithme de chiffrement. Par exemple, pour Java 8, consultez http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Spécifier les algorithmes de chiffrement et les protocoles TLS pour Edge 4.16.01 à 4.16.09

Dans Edge 4.16.01 à 4.16.09, vous définissez les algorithmes de chiffrement et les protocoles par défaut pour les hôtes virtuels de manière globale sur le routeur. Ces valeurs par défaut s'appliquent ensuite à tous les hôtes virtuels.

Utilisez des jetons pour spécifier les protocoles et les algorithmes de chiffrement par défaut :

  • Pour spécifier les protocoles par défaut, utilisez le jeton conf_load_balancing_load.balancing.driver.server.ssl.protocols.
  • Pour spécifier les algorithmes de chiffrement par défaut pour le routeur, utilisez le jeton conf_load_balancing_load.balancing.driver.server.ssl.ciphers.

La valeur par défaut du jeton conf_load_balancing_load.balancing.driver.server.ssl.protocols est la suivante :

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

Ce paramètre spécifie que le routeur est compatible avec les versions 1.0, 1.1 et 1.2 de TLS. Spécifiez une liste de valeurs délimitée par des espaces pour le jeton.

La valeur par défaut du jeton conf_load_balancing_load.balancing.driver.server.ssl.ciphers est la suivante :

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

Ce paramètre spécifie les éléments suivants :

  • Longueur de clé de 128 bits ou plus requise (HIGH).
  • Exclure les algorithmes de chiffrement sans authentification (!aNULL)
  • Exclure les suites de chiffrement utilisant MD5 (!MD5)
  • Exclure les suites de chiffrement utilisant DH (y compris DH anonyme, DH éphémère et DH fixe) ET triple DES (!DH+3DES)
  • Exclure les suites de chiffrement utilisant l'échange de clés RSA ET triple DES (!RSA+3DES)

Pour en savoir plus sur la syntaxe et les valeurs autorisées par ce jeton, consultez Algorithmes de chiffrement OpenSSL. Notez que ce jeton utilise les noms d'algorithmes de chiffrement OpenSSL, tels que AES128-SHA256, et non les noms d'algorithmes de chiffrement Java/JSSE, tels que TLS_RSA_WITH_AES_128_CBC_SHA256.

Pour définir le jeton pour le routeur :

  1. Modifiez le /opt/apigee/customer/application/router.properties fichier. Si ce fichier n'existe pas, créez-le.
  2. Définissez le conf_load_balancing_load.balancing.driver.server.ssl.ciphers jeton. Par exemple, pour spécifier uniquement TLSv1.2 et exclure les suites de chiffrement utilisant des clés prépartagées, ajoutez!PSK :
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. Assurez-vous que le fichier router.properties appartient à apigee :
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Redémarrez le routeur Edge :
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Vérifiez la valeur du jeton :
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Définir les paramètres d'hôte virtuel TLS pour Edge version 4.17.01 et ultérieures

Si vous utilisez Edge version 4.17.01 ou ultérieure, vous pouvez définir certaines propriétés TLS pour un hôte virtuel individuel, telles que le protocole TLS et l'algorithme de chiffrement, à l'aide du tag enfant <Properties> du <VirtualHost> tag. Ces tags sont décrits dans la section Référence de la propriété de l'hôte virtuel.

Exemple :

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

Pour en savoir plus sur la syntaxe et les valeurs autorisées par le jeton ssl_ciphers, consultez Algorithmes de chiffrement OpenSSL. Notez que ce jeton utilise les noms d'algorithmes de chiffrement OpenSSL, tels que AES128-SHA256, et non les noms d'algorithmes de chiffrement Java/JSSE, tels que TLS_RSA_WITH_AES_128_CBC_SHA256.

Créer un hôte virtuel qui utilise HTTPS

Cet exemple spécifie le keystore pour l'hôte virtuel à l'aide d'une référence. L'utilisation d'une référence vous permet de modifier le keystore sans avoir à redémarrer les routeurs.

Pour créer l'hôte virtuel, procédez comme suit :

  1. Créez et configurez un keystore nommé myTestKeystore en suivant la procédure décrite dans Keystores et truststores. Assurez-vous que le keystore utilise le nom d'alias de myKeyAlias pour le certificat et la clé privée.
  2. Utilisez l'appel d'API POST suivant pour créer la référence nommée keystoreref au keystore que vous avez créé ci-dessus :

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    La référence spécifie le nom du keystore et le type de référence en tant que KeyStore.

    Utilisez l'appel d'API GET suivant pour afficher la référence :

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Créez l'hôte virtuel à l'aide de l'API Create a Virtual Host, où <ms-IP> correspond à l'adresse IP ou au nom de domaine du nœud du serveur de gestion.

    Assurez-vous de spécifier la référence de keystore et l'alias de clé corrects :

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. Créez un enregistrement DNS pour l'hôte virtuel qui correspond à l'alias d'hôte.
  5. Si vous disposez de proxys d'API existants, ajoutez l'hôte virtuel à l'élément <HTTPConnection> dans le ProxyEndpoint. L'hôte virtuel est ajouté automatiquement à tous les nouveaux proxys d'API.

    Consultez Mettre à jour un proxy d'API après avoir créé un hôte virtuel dans À propos des hôtes virtuels.

Après avoir mis à jour un proxy d'API pour qu'il utilise l'hôte virtuel et créé l'enregistrement DNS pour l'alias d'hôte , vous pouvez accéder au proxy d'API comme indiqué ci-dessous :

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

Exemple :

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

Créer et modifier des références à un keystore ou à un truststore

Vous pouvez éventuellement configurer l'hôte virtuel pour qu'il utilise une référence au keystore ou au truststore à la place. L'avantage d'utiliser une référence est que vous pouvez la mettre à jour pour qu'elle pointe vers un autre keystore ou truststore afin de mettre à jour le certificat TLS sans avoir à redémarrer un routeur.

Par exemple, vous trouverez ci-dessous un hôte virtuel qui utilise une référence au keystore :

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

Utilisez l'appel d'API POST suivant pour créer la référence nommée keystoreref :

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

La référence spécifie le nom du magasin de clés et son type.

Utilisez l'appel d'API GET suivant pour afficher la référence :

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Pour modifier ultérieurement la référence afin qu'elle pointe vers un magasin de clés différent, assurez-vous que l'alias porte le même nom, utilisez l'appel PUT suivant :

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password