Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
Un host virtual en Edge define los dominios y los 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 API con el protocolo HTTP o con el protocolo HTTPS encriptado que usa TLS. Cuando configuras un host virtual para usar HTTPS y TLS, creas un host virtual en Edge y lo configuras para que use un almacén de claves y un almacén de certificados de confianza.
Obtenga más información:
- Acerca de TLS/SSL
- Usa TLS con Edge
- Acerca de los hosts virtuales
- Configura hosts virtuales para la nube privada
- Referencia de propiedades de host virtual
- Almacenes de claves y almacenes de confianza
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, debes saber si
el nombre público es
api.myCompany.com,myapi.myCompany.com, etcétera. Esa información se usa cuando creas el host virtual y también cuando creas el registro DNS para el host virtual. -
Para la TLS unidireccional, debes crear un almacén de claves que contenga
lo siguiente:
- Certificado TLS: Un certificado firmado por una autoridad certificada (CA) o una cadena de certificados en la que el último certificado está firmado por una CA.
- Clave privada: Edge admite tamaños de clave de hasta 2048 bits. Una frase de contraseña es opcional.
- Para la TLS bidireccional, necesitas un almacén de claves y un almacén de certificados de confianza para contener el certificado del cliente y, de manera opcional, la cadena de CA del certificado. Necesitas el almacén de certificados de confianza incluso si el certificado está firmado por una CA.
Consulta Almacenes 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 lo defina.
El siguiente objeto XML usa el <SSLInfo> elemento para definir un host virtual
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 en verdadero para
habilitar 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 certificados de confianza
con el elemento <TrustStore>. El almacén de confianza contiene el certificado del cliente y, de manera opcional, la cadena de CA
del certificado.
Cómo decidir cómo especificar el nombre del almacén de claves y el almacén de confianza en el host virtual
En el ejemplo de 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 cambiar el almacén de claves que usa el host virtual, por lo general, porque el certificado del almacén de claves actual vencerá pronto. Si deseas cambiar el valor de la referencia, no es necesario que reinicies el router de Edge.
Como alternativa, puedes usar un nombre de almacén de claves literal en el host virtual. Sin embargo, si alguna vez modificas el host virtual para cambiar el nombre del almacén de claves, debes reiniciar los routers de Edge.
Restricciones para el uso de referencias a almacenes de claves y al almacén de certificados 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 a almacenes de claves y almacenes de certificados de confianza en hosts virtuales si admites SNI y cierras SSL en los routers de Apigee.
- Si tienes un balanceador de cargas delante de los routers de Apigee y cierras TLS en el balanceador de cargas, no puedes usar referencias a almacenes de claves y almacenes de confianza en hosts virtuales.
Modifica un host virtual existente para usar referencias al almacén de claves y al almacén de certificados de confianza
Apigee recomienda que los hosts virtuales usen referencias a almacenes de claves y almacenes de confianza. Las referencias te permiten cambiar el almacén de claves y el almacén de certificados de confianza que usa el host virtual sin tener que reiniciar los routers de Edge.
Si tus hosts virtuales están configurados actualmente para usar el nombre literal del almacén de claves o del almacén de certificados de confianza, puedes convertirlos para que usen referencias. Para ello, actualiza el host virtual para que use referencias y, luego, reinicia los routers de Edge.
Configura los cifrados y protocolos TLS para Edge 4.15.07 y versiones anteriores
Si usas la versión 4.15.07 de Edge y versiones anteriores, debes configurar el protocolo TLS y los cifrados
que usa el host virtual con 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
el nombre de Java y JSSE del cifrado. Por ejemplo, para Java 8, consulta
http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.
Especifica los cifrados y protocolos TLS para Edge 4.16.01 a 4.16.09
En Edge 4.16.01 a 4.16.09, debes configurar los cifrados y protocolos predeterminados para los hosts virtuales de forma 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 cifrados 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 1.0, 1.1 y 1.2 de TLS. Especifica 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 el siguiente:
conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES
Este parámetro de configuración especifica lo siguiente:
- Longitud de clave de 128 bits o más requerida (
HIGH). - Excluye los cifrados sin autenticación (
!aNULL). - Excluye los conjuntos de cifrado que usan MD5 (
!MD5). - Excluye los conjuntos de cifrado que usan DH (incluidos DH anónimo, DH efímero y DH fijo) Y
DES triple (
!DH+3DES). - Excluye los conjuntos de cifrado que usan intercambio de claves RSA Y DES triple (
!RSA+3DES).
Para obtener información sobre la sintaxis y los valores permitidos por este token, consulta Cifrados de OpenSSL. Ten en cuenta que este token usa los nombres de cifrado de OpenSSL, como AES128-SHA256, y no los nombres de cifrado de Java/JSSE, como TLS_RSA_WITH_AES_128_CBC_SHA256.
Para configurar el token para el router, haz lo siguiente:
- Edita el archivo
/opt/apigee/customer/application/router.properties. Si ese archivo no existe, créalo. - Configura el
conf_load_balancing_load.balancing.driver.server.ssl.cipherstoken. Por ejemplo, para especificar solo TLSv1.2 y excluir los conjuntos de cifrado que usan 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
- Asegúrate de que el archivo
router.propertiessea propiedad de apigee:chown apigee:apigee /opt/apigee/customer/application/router.properties
- Reinicia el router de Edge:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 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
Configura los parámetros de host virtual de TLS para Edge versión 4.17.01 y versiones posteriores
Si usas la versión 4.17.01 de Edge y versiones posteriores, puedes configurar algunas propiedades de TLS para un
host virtual individual, como el protocolo TLS y el cifrado, con la <Properties> etiqueta secundaria de la
<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 Cifrados de OpenSSL.
Ten en cuenta que este token usa los nombres de cifrado de OpenSSL, como AES128-SHA256, y no
los nombres de cifrado de 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 con una referencia. El uso de 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:
- Crea y configura un almacén de claves llamado myTestKeystore con 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.
-
Usa la siguiente llamada a la API de POST para crear la referencia llamada keystoreref 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="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:passwordEn la referencia, se 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 Crea el host virtual con la API Create a 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 de 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- Crea un registro DNS para el host virtual que coincida con el alias de host.
Si tienes proxies de API existentes, agrega el host virtual al
<HTTPConnection>elemento en el 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 alias de 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
Crea y modifica referencias a un almacén de claves o almacén de certificados de confianza
De manera opcional, puedes configurar el host virtual para usar una referencia al almacén de claves o almacén de certificados 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 certificados de confianza diferente para 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