Accéder aux informations de connexion TLS dans un proxy d'API

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

Edge vous permet de créer des hôtes virtuels qui prennent en charge les protocoles TLS unidirectionnel et bidirectionnel. Avec le protocole TLS à sens unique, le client envoie une requête de session à un hôte virtuel déployé sur un routeur périphérique, et le routeur répond par un certificat contenant la clé publique de l'hôte virtuel. Pour un certificat signé, le client peut ensuite envoyer une requête à l'autorité de certification pour authentifier le certificat.

Avec le protocole TLS bidirectionnel, le client et le serveur Edge transmettent tous deux des certificats qui sont validés dans le cadre d'une requête:

  • Le routeur périphérique présente son certificat au client TLS pour s'authentifier. Le client vérifie ensuite l'identité du serveur avant d'y envoyer son certificat.
  • Le client TLS présente son certificat à Edge pour s'authentifier.

Pour plus d'informations, consultez À propos des hôtes virtuels.

Récupérer des informations de connexion TLS

Lors d'une requête adressée à un proxy d'API via un hôte virtuel compatible avec TLS, Edge peut capturer des informations sur la connexion TLS. Votre proxy d'API peut ensuite accéder à ces informations via des variables de flux pour effectuer une analyse et une validation supplémentaires.

Le type d'informations TLS capturées par Edge varie selon que l'hôte virtuel est compatible avec le protocole TLS unidirectionnel ou bidirectionnel. Par exemple, pour le protocole TLS unidirectionnel, Edge peut capturer des informations sur le chiffrement TLS ou le protocole TLS utilisé dans la connexion TLS.

Pour le protocole TLS bidirectionnel, Edge peut capturer toutes les mêmes informations que celles capturées pour le protocole TLS unidirectionnel, ainsi que des informations sur le certificat du client. Par exemple, Edge peut capturer l'empreinte SHA1 du certificat client et du certificat client au format PEM.

Capture d'informations pour les protocoles TLS unidirectionnel et bidirectionnel

Le tableau suivant répertorie les variables de flux qui contiennent des informations de connexion TLS capturées par Edge et disponibles pour l'accès dans le proxy d'API. Ces informations sont recueillies pour les protocoles TLS unidirectionnel et bidirectionnel en définissant <ConnectionProperties> sur "true" dans la définition de l'hôte virtuel:

Variable de flux Description
tls.cipher Algorithme de chiffrement utilisé par la connexion TLS.
tls.protocol Protocole utilisé par la connexion TLS.
tls.server.name Nom du serveur SNI demandé.
tls.session.id

Identifiant de session.

Cette variable de flux est disponible lorsque vous définissez <ConnectionProperties>, <ClientProperties> ou la valeur "true".

Récupérer des informations TLS supplémentaires lors du protocole TLS bidirectionnel

Le tableau suivant répertorie les variables de flux qui contiennent les détails du certificat client capturés par Edge avec le protocole TLS bidirectionnel. Ces informations sont recueillies pour le protocole TLS bidirectionnel en définissant <ClientProperties> sur "true" dans la définition de l'hôte virtuel:

Variable de flux Description
tls.client.s.dn Nom distinctif de l'objet du certificat client
tls.client.i.dn Émetteur du nom distinctif du certificat client
tls.client.raw.cert Certificat client au format PEM
tls.client.cert.serial Numéro de série du certificat client
tls.client.cert.fingerprint Empreinte SHA1 du certificat client
tls.session.id

Identifiant de session.

Cette variable de flux est disponible lorsque vous définissez <ConnectionProperties> ou <ClientProperties> sur "true".

Configurer un hôte virtuel pour capturer des informations TLS

Pour configurer l'hôte virtuel afin qu'il capture les informations TLS, définissez les propriétés suivantes sous <PropagateTLSInformation> sur true.

  • <ConnectionProperties>: active la capture des informations de connexion TLS pour les protocoles TLS unidirectionnel et bidirectionnel. La valeur par défaut est false.
  • <ClientProperties>: active la capture d'informations supplémentaires pour le protocole TLS bidirectionnel. La valeur par défaut est false.

Par exemple, la définition d'hôte virtuel suivante utilise le protocole TLS bidirectionnel et permet de capturer les deux types d'informations TLS:

<VirtualHost name="secure">
    ....
    <SSLInfo>
        <Enabled>true</Enabled>
        # Enable two-way TLS.
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <IgnoreValidationErrors>false</IgnoreValidationErrors>
        <KeyAlias>ks-alias</KeyAlias>
        <KeyStore>ref://ks-ref</KeyStore>
        <TrustStore>ref://ts-ref</TrustStore>
    </SSLInfo>
    <PropagateTLSInformation>
        <ConnectionProperties>true</ConnectionProperties>
        <ClientProperties>true</ClientProperties>
    </PropagateTLSInformation>
</VirtualHost>

Si vous transmettez un corps JSON, définissez les propriétés comme suit:

  "propagateTLSInformation" : {
    "connectionProperties" : true,
    "clientProperties" : true
  }

Définir des limites de taille d'en-tête

Lorsque vous activez la capture d'informations TLS sur un hôte virtuel, Edge transmet ces informations à l'aide d'en-têtes HTTP. Vous devez donc vous assurer que les limites de taille d'en-tête sont définies de manière appropriée selon que vous utilisez Edge pour le Cloud ou Edge pour le cloud privé:

  • Edge for the Cloud (Edge pour le cloud) : Apigee définit la taille des en-têtes de manière appropriée.
  • Edge pour le cloud privé: fonctionnalité non disponible.

Accéder aux variables de flux dans un proxy d'API

À partir de votre proxy d'API, vous pouvez accéder aux variables de flux TLS et les inspecter. Par exemple, vous pouvez utiliser la règle AssignMessage pour y accéder, y accéder en JavaScript avec la règle JavaScript.

Vous pouvez également référencer les variables de flux dans un élément <Condition> d'un flux proxy ou cible, ou dans un <Step> ou un <RouteRule>. Par exemple, vous pouvez acheminer une requête vers différentes cibles en fonction du numéro de sécurité (SN) du client.

Pour en savoir plus, consultez les articles suivants: