Configura el acceso TLS a una API para la nube privada

Estás viendo la documentación de Apigee Edge.
Ve a 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. 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 API a través del protocolo HTTP, o por el protocolo HTTPS encriptado que usa TLS. Cuando configures un host virtual para usar HTTPS En TLS, crearás un host virtual en Edge y lo configurarás para que use un almacén de claves y Truststore.

Obtenga más información:

Qué necesitas para crear un host virtual

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

  • El nombre de dominio público del host virtual. Por ejemplo, deberías 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 también cuando creas el registro DNS para el un host virtual.
  • Para TLS unidireccional, debes crear un almacén de claves en el que el almacén de claves contenga lo siguiente:
    • Certificado TLS: certificado firmado por una autoridad certificadora (AC) 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 2048 bits. Una frase de contraseña es opcional.
  • Para TLS bidireccional, necesitas un almacén de claves y un almacén de confianza para guardar el el certificado de cliente y, opcionalmente, la cadena de AC del certificado. Necesitas el almacén de confianza incluso si el certificado esté firmado por una AC.

Consulta almacenes de claves y Almacenes de confianza para obtener más información sobre la creación de 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. El siguiente objeto XML usa el elemento <SSLInfo> para definir una instancia para una configuración de TLS unidireccional a través de 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 establece como verdadero en habilita 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 TLS bidireccional, establece el elemento <ClientAuthEnabled> en true y especifica un almacén de confianza usando el <TrustStore> . El almacén de confianza contiene el certificado del cliente y, de forma opcional, la AC del certificado de la cadena de suministro.

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

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

La ventaja de usar una referencia es que puedes cambiar su valor para que cambie el almacén de claves que usa el host virtual, por lo general, porque el certificado del almacén de claves actual se que vencerá próximamente. Cambiar el valor de la referencia no requiere que reinicies el router perimetral.

Como alternativa, puedes usar un nombre de almacén de claves literal en el host virtual. Sin embargo, si alguna vez Si quieres modificar el host virtual para cambiar el nombre del almacén de claves, debes 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 finaliza SSL en los routers de Apigee.
  • Si tiene un balanceador de cargas frente a los routers de Apigee y finaliza TLS en balanceador de cargas, no podrás usar referencias de almacén de claves ni almacén de confianza los hosts.

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 utilicen referencias 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 los hosts virtuales están configurados para usar el nombre literal del almacén de claves o de confianza, puedes convertirlos para usar referencias. Para ello, actualiza el host virtual para que use referencias y, luego, reinicia los routers perimetrales.

Configurar los protocolos y cifrados de TLS para Edge 4.15.07 y versiones anteriores

Si usas Edge 4.15.07 o una versión anterior, configura el protocolo TLS y los algoritmos de cifrado que usa el host virtual mediante las etiquetas secundarias <Ciphers> y <Protocols> del objeto 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 es el nombre de Java y JSSE del algoritmo de cifrado. Por ejemplo, para Java 8 consulta http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

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

En Edge 4.16.01 a 4.16.09, configuras los algoritmos de cifrado y los protocolos predeterminados para hosts virtuales de manera global en el router. Luego, estos valores predeterminados se aplican a todos los hosts virtuales.

Usa tokens para especificar los protocolos y cifrados 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 del 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:

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

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

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

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)
  • Excluye los conjuntos de algoritmos de cifrado mediante MD5 (!MD5)
  • Excluye los conjuntos de algoritmos de cifrado que usan DH (incluidos DH anónimo, DH efímero y DH fijo) Y DES triple (!DH+3DES)
  • Excluye los conjuntos de algoritmos de cifrado mediante el intercambio de claves RSA Y el DES triple (!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 el Nombres de cifrado Java/JSSE, como TLS_RSA_WITH_AES_128_CBC_SHA256.

Para establecer el token para el router, haz lo siguiente:

  1. Edita el /opt/apigee/customer/application/router.properties . Si ese archivo no existe, créalo.
  2. Establece el conf_load_balancing_load.balancing.driver.server.ssl.ciphers. token. Por ejemplo, para especificar solo TLSv1.2 y excluir los conjuntos de algoritmos de cifrado mediante claves precompartidas, agregar!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

Parámetro de configuración Parámetros de host virtual TLS para Edge 4.17.01 y versiones posteriores

Si usas Edge 4.17.01 o una versión posterior, puedes establecer algunas propiedades de TLS para un host virtual individual, como el protocolo y el algoritmo de cifrado TLS, mediante la etiqueta secundaria <Properties> del <VirtualHost> etiqueta. Estas etiquetas se describen en 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 permitidos por 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 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 a través de una referencia. Con un 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 con la descrito 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 con el nombre keystoreref en el 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 con el comando Crear un API de Virtual Host, en la 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 del almacén de claves y el alias de clave correctos:

    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 la 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 para usar el host virtual y crear el registro DNS para el host alias, 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

Crear y modificar 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. en un almacén de confianza. La ventaja de usar una referencia es que puedes actualizar la referencia a apuntan a un almacén de claves o a un almacén de confianza diferentes para actualizar el certificado TLS sin tener que reiniciar un entre la VM y un Cloud 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 con el nombre 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