Configura TLS desde Edge hasta el backend (nube y nube privada)

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

Un proxy de API funciona como una asignación de un extremo disponible públicamente para tu servicio de backend. Un host virtual define la forma en que se expone el proxy de API público a una app. Por ejemplo, el host virtual determina si se puede acceder al proxy de API mediante TLS. Cuando configures un proxy de API, edita su definición de ProxyEndpoint para configurar los hosts virtuales que usa.

El TargetEndpoint es el equivalente de salida del ProxyEndpoint. Un TargetEndpoint funciona como un cliente HTTP de Edge a un servicio de backend. Cuando creas un proxy de API, puedes configurarlo para que use cero o más TargetEndpoints.

Obtenga más información:

Configura un TargetEndpoint o TargetServer

Para configurar un TargetEndpoint, edita el objeto XML que lo define. Para editar el TargetEndpoint, edita el archivo en formato XML que define TargetEndpoint en tu proxy de API, o bien edítalo en la IU de administración de Edge.

Para usar la IU de administración de Edge a fin de editar el TargetEndpoint, haz lo siguiente:

  1. Accede a la IU de administración de Edge en https://enterprise.apigee.com.
  2. Selecciona el nombre del proxy de API que deseas actualizar.
  3. Selecciona la pestaña Desarrollar.
  4. En Target Endpoints, selecciona default.
  5. En el área de código, aparece la definición TargetEndpoint, similar a la siguiente:
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. Configura un almacén de confianza como se describe a continuación en Información sobre la configuración de TLS con el backend.
  7. Realiza los cambios que desees y guarda el proxy. Si se implementó el proxy de API, cuando se guarda, se vuelve a implementar con la configuración nueva.

Ten en cuenta que la definición de TargetEndpoint contiene una propiedad name. Usa el valor de la propiedad name para configurar la definición de ProxyEndpoint de un proxy de API para usar el TargetEndpoint. Consulta la referencia de configuración de proxy de la API para obtener más información.

TargetEndpoints se puede configurar para hacer referencia a un TargetServer, en lugar de a la URL de destino explícita. Una configuración de TargetServer separa las URLs de extremos concretas de las configuraciones de TargetEndpoint. TargetServers se usa para admitir el balanceo de cargas y la conmutación por error en varias instancias de servidor de backend.

A continuación, se muestra un ejemplo de definición de TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer> 

Se hace referencia a un TargetServer por nombre en el elemento <HTTPTargetConnection> en una definición de TargetEndpoint. Puedes configurar uno o más TargetServers con nombre, como se muestra a continuación.

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

Consulta Balanceo de cargas entre servidores de backend para obtener más información.

Información acerca de la configuración de TLS con el backend

Antes de configurar el acceso TLS al backend, debes comprender dos puntos importantes:

  1. De forma predeterminada, Edge no valida el certificado de backend. Debes crear un almacén de confianza para configurar Edge a fin de validar el certificado.
  2. Usa una referencia para especificar el almacén de claves o el almacén de confianza que usa Edge.

Ambas consideraciones se describen a continuación.

Define un almacén de confianza para habilitar la validación de certificados

Cuando se realiza una solicitud TLS a través de TargetEndpoint o TargetServer, Edge no valida de forma predeterminada el certificado TLS recibido del servidor de backend. Eso significa que Edge no valida lo siguiente:

  • El certificado tiene la firma de una AC de confianza.
  • El certificado no venció.
  • El certificado presenta un nombre común. Si hay un nombre común, Edge no valida que el nombre común coincida con el nombre de host especificado en la URL.

Si deseas configurar Edge para validar el certificado de backend, debes hacer lo siguiente:

  1. Crea un almacén de confianza en Edge.
  2. Sube el certificado o la cadena de certificados del servidor al almacén de confianza. Si el certificado del servidor está firmado por un tercero, deberás subir la cadena de certificados completa, incluido el certificado de AC raíz, al almacén de confianza. No hay CA de confianza implícita.
  3. Agrega el almacén de confianza a la definición de TargetEndpoint o TargetServer.

Consulta Almacenes de claves y almacenes de confianza para obtener más información.

Por ejemplo:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Usa una referencia a un almacén de claves o almacén de confianza

En el siguiente ejemplo, se muestra cómo configurar un TargetEndpoint o TargetServer para que admita TLS. Como parte de la configuración de TLS, debes especificar un almacén de confianza y un almacén de claves como parte de una definición de TargetEndpoint o TargetServer.

Apigee recomienda encarecidamente que uses una referencia al almacén de claves y al almacén de confianza en la definición de TargetEndpoints o TargetServer. La ventaja de usar una referencia es que solo tienes que actualizar la referencia para que apunte a un almacén de claves o almacén de confianza diferente para actualizar el certificado TLS.

Las referencias a almacenes de claves y almacenes de confianza en la definición de TargetEndpoints o TargetServer funcionan de la misma manera que para los hosts virtuales.

Convierte un TargetEndpoint o TargetServer para usar una referencia

Es posible que tengas definiciones existentes de TargetEndpoint o TargetServer que usan el nombre literal del almacén de claves y el almacén de confianza. A fin de convertir la definición TargetEndpoint o TargetServer para usar referencias, haz lo siguiente:

  1. Actualiza la definición de TargetEndpoint o TargetServer para usar una referencia.
  2. Reinicia los procesadores de mensajes de Edge:
    • En el caso de los clientes de la nube pública, comunícate con la asistencia de Apigee Edge para reiniciar los procesadores de mensajes.
    • Para los clientes de la nube privada, reinicia los procesadores de mensajes perimetrales de a uno.
  3. Confirma que tu TargetEndpoint o TargetServer funcionan correctamente.

Configura TLS unidireccional en el servidor de backend

Cuando se usa una definición de TargetEndpoint, la configuración del acceso TLS unidireccional desde Edge (cliente TLS) al servidor de backend (servidor TLS) no requiere ninguna configuración adicional en Edge. Depende del servidor de backend configurar TLS de manera correcta.

Solo debes asegurarte de que el elemento <URL> de la definición de TargetEndpoint haga referencia al servicio de backend mediante el protocolo HTTPS y de habilitar TLS:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Si usas un TargetServer para definir el servicio de backend, habilita TLS en la definición de TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer> 

Sin embargo, si deseas que Edge valide el certificado de backend, debes crear un almacén de confianza que contenga el certificado de backend o la cadena de certificados. Luego, especifica el almacén de confianza en la definición de TargetEndpoint:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

O bien en la definición de TargetServer:

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

Para configurar la TLS unidireccional, haz lo siguiente:

  1. Si deseas validar el certificado de backend, crea un almacén de confianza en Edge y sube el certificado de backend o la cadena de CA, como se describe en Almacenes de claves y almacenes de confianza. Para este ejemplo, si tienes que crear un almacén de confianza, asígnale el nombre myTrustStore.
  2. Si creaste un almacén de confianza, usa la siguiente llamada a la API de POST para crear la referencia llamada myTrustStoreRef al almacén de confianza que creaste antes:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. Usa la IU de administración perimetral a fin de actualizar la definición de TargetEndpoint para el proxy de API (o, si defines el proxy de API en XML, edita los archivos en formato XML del proxy):
    1. Accede a la IU de administración de Edge en https://enterprise.apigee.com.
    2. En el menú de la IU de administración perimetral, selecciona APIs.
    3. Selecciona el nombre del proxy de API que deseas actualizar.
    4. Selecciona la pestaña Desarrollo.
    5. En Target Endpoints, selecciona default.
    6. En el área de código, edita el elemento <HTTPTargetConnection> para agregar el elemento <SSLInfo>. Asegúrate de especificar la referencia correcta al almacén de confianza y configurar <Enabled> como verdadero:
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. Guarda el proxy de API. Si se implementó el proxy de API, cuando se guarda, se vuelve a implementar con la configuración nueva.

Configura TLS bidireccional en el servidor de backend

Si deseas admitir TLS bidireccional entre Edge (cliente TLS) y el servidor de backend (servidor TLS), sigue estos pasos:

  • Crea un almacén de claves en Edge y sube el certificado de Edge y la clave privada.
  • Si deseas validar el certificado de backend, crea un almacén de confianza en Edge que contenga el certificado y la cadena de CA que recibiste del servidor de backend.
  • Actualiza el TargetEndpoint de cualquier proxy de API que haga referencia al servidor de backend para configurar el acceso a TLS.

Usa el alias de clave para especificar el certificado del almacén de claves

Puedes definir varios certificados, cada uno con su propio alias, en el mismo almacén de claves. De forma predeterminada, Edge usa el primer certificado definido en el almacén de claves.

De manera opcional, puedes configurar Edge para que use el certificado que especifica la propiedad <KeyAlias>. Esto te permite definir un almacén de claves único para varios certificados y, luego, seleccionar el que deseas usar en la definición de TargetServer. Si Edge no puede encontrar un certificado con un alias que coincida con <KeyAlias>, usa la acción predeterminada de seleccionar el primer certificado en el almacén de claves.

Los usuarios de Edge para Nube Pública deben comunicarse con el equipo de Asistencia de Apigee Edge para habilitar esta función.

Configura TLS bidireccional

Para configurar la TLS bidireccional:

  1. Crea el almacén de claves en Edge y sube el certificado y la clave privada mediante el procedimiento que se describe a continuación: Almacenes de claves y almacenes de confianza. Para este ejemplo, crea un almacén de claves llamado myTestKeystore que use un nombre de alias de myKey para el certificado y la clave privada.
  2. Usa la siguiente llamada a la API de POST para crear la referencia llamada myKeyStoreRef al almacén de claves que creaste antes:

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

    La referencia especifica el nombre del almacén de claves y el tipo de referencia como KeyStore.

    Usa la siguiente llamada a la API de GET para ver la referencia:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. Si deseas validar el certificado de backend, crea un almacén de confianza en Edge y sube el certificado y la cadena de CA, como se describe aquí: Almacén de claves y almacenes de confianza. En este ejemplo, si debes crear un almacén de confianza, nómbralo myTrustStore.
  4. Si creaste un almacén de confianza, usa la siguiente llamada a la API de POST para crear la referencia llamada myTrustStoreRef al almacén de confianza que creaste antes:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. Usa la IU de administración perimetral a fin de actualizar la definición de TargetEndpoint para el proxy de API (o, si defines el proxy de API en XML, edita los archivos en formato XML del proxy):
    1. Accede a la IU de administración de Edge en https://enterprise.apigee.com.
    2. En el menú de la IU de administración perimetral, selecciona APIs.
    3. Selecciona el nombre del proxy de API que deseas actualizar.
    4. Selecciona la pestaña Desarrollo.
    5. En Target Endpoints, selecciona default.
    6. En el área de código, edita el elemento <HTTPTargetConnection> para agregar el elemento <SSLInfo>. Asegúrate de especificar el almacén de claves y el alias de clave correctos, y establecer los elementos <Enabled> y <ClientAuthEnabled> en verdadero:
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. Guarda el proxy de API. Si se implementó el proxy de API, cuando se guarda, se vuelve a implementar con la configuración nueva.

Si deseas obtener más información sobre las opciones disponibles en <TargetEndpoint>, incluido el uso de variables para proporcionar valores <SSLInfo> de TargetEndpoint, consulta la referencia de configuración de proxy de la API.

Habilitación de SNI

Edge admite el uso de la indicación del nombre del servidor (SNI) de los procesadores de mensajes a fin de apuntar a los extremos en Apigee Edge para Cloud y para las implementaciones de nube privada.

Para que Edge de la nube privada sea retrocompatible con tus backends de destino existentes, Apigee inhabilitó la SNI de forma predeterminada. Si tu backend de destino está configurado para admitir SNI, puedes habilitar esta función. Consulta Usa SNI con Edge para obtener más información.