Configura el acceso TLS a una API para la nube privada

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

Un host virtual en Edge define los dominios y puertos en los que se expone un proxy de API y, por extensión, la URL que usan las apps para acceder a un proxy de API.

Un host virtual también define si se accede al proxy de la API mediante el protocolo HTTP o el protocolo HTTPS encriptado que usa TLS. Cuando configuras un host virtual para que use HTTPS y TLS, debes crear un host virtual en Edge y configurarlo para que use un almacén de claves y un almacén de confianza.

Obtenga más información:

Qué necesitas para crear un host virtual

Antes de crear un host virtual, debes contar con la siguiente información:

  • El nombre de dominio público del host virtual. Por ejemplo, debes saber si el nombre público es api.myCompany.com, myapi.myCompany.com, etc. Esa información se usa cuando creas el host virtual y el registro DNS para el host virtual.
  • Para la TLS unidireccional, debes crear un almacén de claves en el que contenga lo siguiente:
    • Certificado TLS, ya sea un certificado firmado por una autoridad certificadora (CA) o una cadena de certificados en la que el último certificado esté firmado por una AC.
    • Clave privada: Edge admite tamaños de clave de hasta 2,048 bits. La frase de contraseña es opcional.
  • En el caso de la TLS bidireccional, necesitas un almacén de claves y un almacén de confianza para contener el certificado del cliente y, de forma opcional, la cadena de CA del certificado. Necesitas el almacén de confianza incluso si el certificado está firmado por una CA.

Consulta Almacén de claves y almacenes de confianza para obtener más información sobre cómo crear almacenes de claves y almacenes de confianza.

Configuración de host virtual para TLS

Para crear un host virtual, crea un objeto XML que defina el host virtual. En el siguiente objeto XML, se usa el elemento <SSLInfo> a fin de definir un host virtual para una configuración de TLS unidireccional mediante 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>

En este ejemplo, el elemento <Enabled> se configura como verdadero para habilitar la TLS unidireccional, y los elementos <KeyStore> y <KeyAlias> especifican el almacén de claves y la clave que usa la conexión TLS.

Para habilitar la TLS bidireccional, establece el elemento <ClientAuthEnabled> en true y especifica un almacén de confianza con el elemento <TrustStore>. El almacén de confianza contiene el certificado del cliente y, de forma opcional, la cadena de CA del certificado.

Decide cómo especificar el nombre del almacén de claves y el almacén de confianza en el host virtual

En el ejemplo del host virtual anterior, especificaste el almacén de claves con una referencia. Una referencia es una variable que contiene el nombre del almacén de claves, en lugar de especificar directamente el nombre del almacén de claves.

La ventaja de usar una referencia es que puedes cambiar el valor de la referencia para modificar el almacén de claves que usa el host virtual, generalmente porque el certificado del almacén de claves actual vencerá pronto. Para cambiar el valor de la referencia, no es necesario que reinicies el router perimetral.

Como alternativa, puedes usar un nombre literal de almacén de claves en el host virtual. Sin embargo, si alguna vez modificas el host virtual para cambiar el nombre del almacén de claves, deberás reiniciar los routers perimetrales.

Restricciones en el uso de referencias a almacenes de claves y almacenes de confianza

Debes tener en cuenta la siguiente restricción cuando uses referencias a almacenes de claves y almacenes de confianza:

  • Solo puedes usar referencias de almacén de claves y almacén de confianza en hosts virtuales si admites SNI y finalizas SSL en los routers de Apigee.
  • Si tienes un balanceador de cargas frente a los routers de Apigee y finalizas TLS en el balanceador de cargas, no puedes usar referencias de almacén de claves ni almacén de confianza en hosts virtuales.

Modifica un host virtual existente para usar referencias al almacén de claves y al almacén de confianza

Apigee recomienda que los hosts virtuales usen referencia a almacenes de claves y almacenes de confianza. Las referencias te permiten cambiar el almacén de claves y el almacén de confianza que usa el host virtual sin tener que reiniciar los routers perimetrales.

Si tus hosts virtuales están configurados para usar el nombre literal del almacén de claves o almacén de confianza, puedes convertirlos para usar referencias. Para hacerlo, actualiza el host virtual a fin de usar referencias y, luego, reinicia los routers perimetrales.

Configura los protocolos y algoritmos de cifrado de TLS para Edge 4.15.07 y versiones anteriores

Si usas Edge 4.15.07 y versiones anteriores, debes configurar el protocolo TLS y los algoritmos de cifrado que usa el host virtual mediante las etiquetas secundarias <Ciphers> y <Protocols> de la etiqueta <SSLInfo>. Estas etiquetas se describen en la siguiente tabla.

Por ejemplo:

    <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>

La etiqueta <Cipher> usa los nombres Java y JSSE del algoritmo de cifrado. Por ejemplo, en el caso de Java 8, consulta http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Especifica los protocolos y algoritmos de cifrado de TLS para Edge 4.16.01 a 4.16.09

En Edge 4.16.01 a 4.16.09, estableces los algoritmos de cifrado y los protocolos predeterminados para los hosts virtuales a nivel global en el router. Estos valores predeterminados se aplican a todos los hosts virtuales.

Usa tokens para especificar los algoritmos de cifrado y los protocolos predeterminados:

  • Para especificar los protocolos predeterminados, usa el token conf_load_balancing_load.balancing.driver.server.ssl.protocols
  • Para especificar los algoritmos de cifrado predeterminados para el router, usa el token conf_load_balancing_load.balancing.driver.server.ssl.ciphers

El valor predeterminado del token conf_load_balancing_load.balancing.driver.server.ssl.protocols es el siguiente:

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

Este parámetro de configuración especifica que el router admite las versiones de TLS 1.0, 1.1 y 1.2. Especifica una lista de valores delimitados por espacios para el token.

El valor predeterminado del token conf_load_balancing_load.balancing.driver.server.ssl.ciphers es el siguiente:

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

Esta configuración especifica lo siguiente:

  • Se requiere una longitud de clave de 128 bits o más (HIGH).
  • Excluir algoritmos de cifrado sin autenticación (!aNULL)
  • Excluir conjuntos de cifrado mediante MD5 (!MD5)
  • Excluir los conjuntos de algoritmos de cifrado que usan DH (incluidos el DH anónimo, el DH efímero y el DH fijo) Y DES triples (!DH+3DES)
  • Excluir los conjuntos de algoritmos de cifrado mediante el intercambio de clave RSA Y triple DES (!RSA+3DES)

Para obtener información sobre la sintaxis y los valores que permite este token, consulta Algoritmos de cifrado de OpenSSL. Ten en cuenta que este token usa los nombres de cifrado de OpenSSL, como AES128-SHA256, y no los nombres de algoritmo de cifrado Java/JSSE, como TLS_RSA_WITH_AES_128_CBC_SHA256.

Para configurar el token del router, haz lo siguiente:

  1. Edita el archivo /opt/apigee/customer/application/router.properties. Si ese archivo no existe, créalo.
  2. Establece el token conf_load_balancing_load.balancing.driver.server.ssl.ciphers. Por ejemplo, para especificar solo TLSv1.2 y excluir los conjuntos de algoritmos de cifrado mediante claves precompartidas, agrega !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. Asegúrate de que el archivo router.properties sea propiedad de Apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Reinicia el router perimetral:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Verifica el valor del token:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Establece parámetros de host virtual de TLS para la versión 4.17.01 y posteriores de Edge

Si usas Edge 4.17.01 y versiones posteriores, puedes configurar algunas propiedades de TLS para un host virtual individual, como el algoritmo de cifrado y el protocolo TLS, mediante la etiqueta secundaria <Properties> de la etiqueta <VirtualHost>. Estas etiquetas se describen en la Referencia de propiedades de host virtual.

Por ejemplo:

<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>

Para obtener información sobre la sintaxis y los valores que permite el token ssl_ciphers, consulta Algoritmos de cifrado de OpenSSL. Ten en cuenta que este token usa los nombres de cifrado de OpenSSL, como AES128-SHA256, y no los nombres de algoritmo de cifrado Java/JSSE, como TLS_RSA_WITH_AES_128_CBC_SHA256.

Crea un host virtual que use HTTPS

En este ejemplo, se especifica el almacén de claves para el host virtual mediante una referencia. Usar una referencia te permite cambiar el almacén de claves sin tener que reiniciar los routers.

Usa el siguiente procedimiento para crear el host virtual:

  1. Crea y configura un almacén de claves llamado myTestKeystore mediante el procedimiento que se describe aquí: Almacenes de claves y almacenes de confianza. Asegúrate de que el almacén de claves use un nombre de alias de myKeyAlias para el certificado y la clave privada.
  2. Usa la siguiente llamada a la API de POST para crear la referencia llamada keystoreref del 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="keystoreref">
        <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/keystoreref -u uname:password
    
  3. Crea el host virtual mediante la API de Create a Virtual Host, en el que <ms-IP> es la dirección IP o el nombre de dominio del nodo del servidor de administración.

    Asegúrate de especificar la referencia y el alias de clave correctos del almacén de claves:

    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. Crea un registro DNS para el host virtual que coincida con el alias del host.
  5. Si tienes proxies de API existentes, agrega el host virtual al elemento <HTTPConnection> en ProxyEndpoint. El host virtual se agrega automáticamente a todos los proxies de API nuevos.

    Consulta Actualiza un proxy de API después de crear un host virtual en Acerca de los hosts virtuales.

Después de actualizar un proxy de API a fin de usar el host virtual y crear el registro DNS para el alias del host, puedes acceder al proxy de API como se muestra a continuación:

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

Por ejemplo:

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

Creación y modificación de referencias a un almacén de claves o un almacén de confianza

De manera opcional, puedes configurar el host virtual para que use una referencia al almacén de claves o al almacén de confianza. La ventaja de usar una referencia es que puedes actualizar la referencia para que apunte a un almacén de claves o almacén de confianza diferente y así actualizar el certificado TLS sin tener que reiniciar un router.

Por ejemplo, a continuación se muestra un host virtual que usa una referencia al almacén de claves:

<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>

Usa la siguiente llamada a la API de POST para crear la referencia llamada 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

En la referencia, se especifica el nombre del almacén de claves y su tipo.

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/keystoreref -u uname:password

Para cambiar más adelante la referencia a fin de que apunte a un almacén de claves diferente, asegúrate de que el alias tenga el mismo nombre, usa la siguiente llamada PUT:

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