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

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

Un hôte virtuel sur la périphérie 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 l'accès au proxy d'API est effectué à l'aide du protocole HTTP ou du protocole HTTPS chiffré qui utilise le protocole TLS. Lors de la configuration d'un hôte virtuel pour qu'il utilise HTTPS et TLS, vous créez un hôte virtuel sur Edge et vous le configurez pour utiliser un keystore et un Truststore.

En savoir plus:

Conditions requises pour créer 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 l'enregistrement DNS correspondant.
  • 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, ou chaîne de certificats dont le dernier est signé par une autorité de certification.
    • Clé privée : Edge prend en charge des tailles de clé allant jusqu'à 2 048 bits. La phrase secrète est facultative.
  • Pour le protocole TLS bidirectionnel, vous avez besoin d'un keystore et d'un Truststore pour contenir le certificat du client et, éventuellement, la chaîne d'autorité de certification du certificat. Vous avez besoin du Trustedstore 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 la section Keystores et Truststores.

Configuration d'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> afin de 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 à sens unique, 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 magasin de confiance à 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.

Décider de la manière de 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 qui contient le nom du keystore, au lieu de spécifier directement le nom du keystore.

L'avantage d'utiliser une référence est que vous pouvez modifier sa valeur pour modifier le keystore utilisé par l'hôte virtuel, généralement parce que le certificat du keystore actuel expire dans un avenir proche. La modification de la valeur de référence ne nécessite pas de redémarrer le routeur Edge.

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

Restrictions d'utilisation des références aux keystores et aux Trustedstores

Vous devez prendre en compte la restriction suivante lorsque vous utilisez des références à des keystores et à des Truststores:

  • Vous ne pouvez utiliser des références de keystore et de Trustedstore dans des hôtes virtuels que si vous êtes compatible avec l'extension SNI et que vous arrêtez le protocole SSL sur les routeurs Apigee.
  • Si vous disposez d'un équilibreur de charge devant les routeurs Apigee et que vous arrêtez le protocole TLS au niveau de l'équilibreur de charge, vous ne pouvez pas utiliser de références à un keystore et à un magasin de confiance dans les hôtes virtuels.

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

Apigee recommande vivement que les hôtes virtuels utilisent des références aux keystores et aux Truststores. 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 du truststore, vous pouvez les convertir en 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 périphériques.

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

Si vous utilisez Edge 4.15.07 ou une version antérieure, définissez le protocole et les algorithmes de chiffrement TLS 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 tag <Cipher> utilise les noms Java et JSSE de l'algorithme de chiffrement. Par exemple, pour Java 8, reportez-vous à http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Spécifier les chiffrements et 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 dans le monde entier 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 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:

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

Ce paramètre indique que le routeur est compatible avec les versions 1.0, 1.1 et 1.2 de TLS. Spécifiez pour le jeton une liste de valeurs séparées par des espaces.

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

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

Ce paramètre spécifie:

  • Veuillez saisir une longueur de clé d'au moins 128 bits (HIGH).
  • Exclure les algorithmes de chiffrement sans authentification (!aNULL)
  • Exclure les suites de chiffrement à l'aide de MD5 (!MD5)
  • Exclure les suites de chiffrement utilisant le protocole DH (y compris le DH anonyme, le DH éphémère et le DH fixe) ET le triple DES (!DH+3DES)
  • Exclure les suites de chiffrement à l'aide de l'échange de clés RSA ET du triple DES (!RSA+3DES)

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

Pour définir le jeton pour le routeur:

  1. Modifiez le fichier /opt/apigee/customer/application/router.properties. Si ce fichier n'existe pas, créez-le.
  2. Définissez le jeton conf_load_balancing_load.balancing.driver.server.ssl.ciphers. Par exemple, pour ne spécifier que TLS 1.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 des paramètres d'hôte virtuel TLS pour Edge 4.17.01 et versions ultérieures

Si vous utilisez Edge 4.17.01 ou une version ultérieure, vous pouvez définir certaines propriétés TLS pour un hôte virtuel individuel, telles que le protocole et l'algorithme de chiffrement TLS, à l'aide du tag enfant <Properties> du tag <VirtualHost>. Ces tags sont décrits dans la documentation de référence sur les propriétés d'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 la page Chiffrements OpenSSL. Notez que ce jeton utilise des noms d'algorithmes de chiffrement OpenSSL, tels que AES128-SHA256, et non des noms d'algorithmes 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 de 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 ici: Keystores et Truststores. Assurez-vous que le keystore utilise un nom d'alias 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 Créer un hôte virtuel, où <ms-IP> est l'adresse IP ou le nom de domaine du nœud du serveur de gestion.

    Veillez à spécifier la référence 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 correspondant à l'alias d'hôte pour l'hôte virtuel.
  5. Si vous disposez de proxys d'API existants, ajoutez l'hôte virtuel à l'élément <HTTPConnection> du point de terminaison 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 utiliser 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 magasin de confiance

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

L'exemple ci-dessous montre 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