Acceder a la información de conexión TLS en un proxy de API

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Edge te permite crear hosts virtuales que admiten TLS unidireccional y bidireccional. Con la TLS unidireccional, el cliente emite una solicitud de sesión a un host virtual implementado en un router perimetral, y el router responde con un certificado que contiene la clave pública del host virtual. Luego, en el caso de un certificado firmado, el cliente puede enviar una solicitud a la autoridad certificadora (CA) para que lo autentique.

En la TLS bidireccional, tanto el cliente como Edge pasan certificados que se validan como parte de una solicitud:

  • Edge Router presenta su certificado al cliente de TLS para que se autentique. Luego, el cliente verifica la identidad del servidor antes de enviar el certificado al servidor.
  • El cliente de TLS presenta su certificado a Edge para autenticarse.

Consulta Acerca de los hosts virtuales para obtener más información.

Capturar información de conexión TLS

Durante una solicitud a un proxy de API a través de un host virtual compatible con TLS, Edge puede capturar información sobre la conexión TLS. Luego, el proxy de la API puede acceder a esa información a través de variables de flujo para realizar análisis y validaciones adicionales.

El tipo de información de TLS que captura Edge depende de si el host virtual admite TLS unidireccional o bidireccional. Por ejemplo, para la TLS unidireccional, Edge puede capturar información sobre el algoritmo de cifrado TLS o el protocolo TLS que se usa en la conexión TLS.

En el caso de la TLS bidireccional, Edge puede capturar toda la misma información que se obtiene con la TLS unidireccional y, además, capturar la información sobre el certificado del cliente. Por ejemplo, Edge puede capturar la huella digital SHA1 del certificado de cliente y el certificado de cliente en formato PEM.

Captura de información para TLS unidireccional y bidireccional

En la siguiente tabla, se enumeran las variables de flujo que contienen información de conexión TLS capturada por Edge y que está disponible para acceder en el proxy de la API. Esta información se obtiene para TLS unidireccional y bidireccional si se configura <ConnectionProperties> como verdadero en la definición del host virtual:

Variable de flujo Descripción
tls.cipher El algoritmo de cifrado que usa la conexión TLS.
tls.protocol El protocolo que usa la conexión TLS.
tls.server.name El nombre del servidor de SNI solicitado.
tls.session.id

El identificador de la sesión.

Esta variable de flujo está disponible cuando configuras <ConnectionProperties>, <ClientProperties> o como verdadero.

Capturar información adicional de TLS durante la TLS bidireccional

En la siguiente tabla, se enumeran las variables de flujo que contienen los detalles de certificado de cliente capturados por Edge en la TLS bidireccional. Esta información se obtiene para la TLS bidireccional si se configura <ClientProperties> como verdadero en la definición del host virtual:

Variable de flujo Descripción
tls.client.s.dn El nombre distinguido (DN) de la entidad emisora del certificado de cliente.
tls.client.i.dn El nombre distinguido (DN) de la entidad emisora del certificado de cliente.
tls.client.raw.cert El certificado de cliente en formato PEM.
tls.client.cert.serial El número de serie del certificado de cliente.
tls.client.cert.fingerprint La huella digital SHA1 del certificado de cliente.
tls.session.id

El identificador de la sesión.

Esta variable de flujo está disponible cuando configuras <ConnectionProperties> o <ClientProperties> como verdadero.

Configura un host virtual para capturar información de TLS

Si quieres configurar el host virtual para que capture información de TLS, establece las siguientes propiedades en <PropagateTLSInformation> como true.

  • <ConnectionProperties>: Habilita la captura de información de conexión de TLS para TLS unidireccional y bidireccional. El valor predeterminado es false.
  • <ClientProperties>: Habilita la captura de información adicional para la TLS bidireccional. El valor predeterminado es false.

Por ejemplo, la siguiente definición de host virtual usa TLS bidireccional y permite la captura de ambos tipos de información de 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 pasas un cuerpo JSON, configura las propiedades de la siguiente manera:

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

Cómo establecer límites de tamaño para los encabezados

Cuando habilitas la captura de información de TLS en un host virtual, Edge pasa esa información mediante encabezados HTTP. Por lo tanto, debes asegurarte de que los límites de tamaño del encabezado estén configurados de forma correcta en función de si usas Edge para la nube o Edge para la nube privada:

  • Edge para la nube: Apigee configura los tamaños de los encabezados de forma adecuada.
  • Edge para la nube privada: La función no está disponible.

Acceder a las variables de flujo en un proxy de API

Desde tu proxy de API, puedes acceder a las variables de flujo de TLS y, luego, inspeccionarlas. Por ejemplo, puedes usar la política AssignMessage para acceder a ellos y acceder a ellos en JavaScript con la política de JavaScript.

También puedes hacer referencia a las variables de flujo en un elemento <Condition> de un flujo proxy o de destino, o en un <Step> o <RouteRule>. Por ejemplo, podrías enrutar una solicitud a distintos destinos según el SN del cliente.

Para obtener más información, consulta lo siguiente: