Proteger dominios personalizados con SSL

La compatibilidad de SSL con App Engine ofrece extremos SSL distribuidos en todo el mundo y balanceo de cargas incorporado para que tu app funcione de forma segura, confiable y rápida ante un público mundial.

De manera predeterminada, las conexiones HTTPS de tu dominio personalizado están habilitadas automáticamente mediante certificados SSL administrados. Después de asignar un dominio personalizado a tu aplicación y actualizar tus registros DNS, App Engine aprovisiona un certificado SSL administrado, lo renueva y lo revoca cuando quitas el dominio personalizado de tu aplicación

Antes de comenzar

  • Asegúrate de haber configurado el dominio personalizado en tu proyecto de App Engine.

  • Si usas Cloud Load Balancing y serverless network endpoint group (NEGS) sin servidores a fin de enrutar el tráfico a tu app de App Engine, recomendamos asignar el dominio personalizado al balanceador de cargas, en lugar de asignarlo directamente a tu app, y usar certificados SSL gestionado por Google y creados para el balanceador de cargas. Esto quita la necesidad de administrar certificados SSL independientes para cada app sin servidores. Además, con Cloud Load Balancing, puedes establecer políticas de SSL que controlen las características de SSL que tu balanceador de cargas negocia con los clientes.

    Si deseas obtener más información, consulta las siguientes páginas:

    Ten en cuenta la siguiente limitación:

    • Te recomendamos usar controles de entrada para que la app solo reciba solicitudes enviadas desde el balanceador de cargas (y la VPC, si la usas). De lo contrario, los usuarios pueden usar la URL de App Engine de tu app para omitir el balanceador de cargas, las políticas de seguridad de Google Cloud Armor, los certificados SSL y las claves privadas que se pasan a través del balanceador de cargas.

Verifica un certificado administrado

Después de configurar tu dominio personalizado y actualizar los registros DNS, se aprovisionará de forma automática un certificado SSL administrado en pocos minutos. La selección de la autoridad certificadora es automática. El certificado administrado está firmado por Google Trust Services (GTS) o Let's Encrypt.

Sigue estos pasos para verificar que se aprovisionó el certificado:

  1. En la consola de Google Cloud, ve a App Engine > Configuración > Dominios personalizados:

    Ir a Dominios personalizados

  2. La Seguridad SSL se muestra como Administrada por Google.

Soluciona problemas de certificados SSL administrados

  • Quizás necesites actualizar los registros DNS para tu dominio personalizado a fin de verificar el nombre del dominio. App Engine no puede aprovisionar certificados para dominios sin verificar.

  • Puedes verificar el estado de tu certificado con la API de Administrador a través de una solicitud AuthorizedCertificate.GET.

  • Si no se aprovisionó un certificado porque los registros DNS no están disponibles, el campo ManagedCertificate.ManagementStatus puede ser FAILED_RETRYING_NOT_VISIBLE. Verifica que tus registros DNS estén actualizados, espera unos minutos y, luego, intenta nuevamente. Los registros DNS pueden tardar hasta 24 horas en estar disponibles.

  • Si el estado es FAILED_PERMANENT, quiere decir que todos los intentos de renovación fallaron. Verifica tu configuración de DNS y actualiza el mapeo de tu dominio personalizado mediante los pasos para actualizar los certificados SSL administrados.

Actualiza a certificados SSL administrados

Antes de actualizar a certificados SSL administrados por Google, ten en cuenta que los certificados administrados no son compatibles con la asignación de comodines.

Si usas subdominios y Let's Encrypt emite el certificado, hay un límite de 50 certificados administrados por semana para cada dominio base. Si alcanzas este límite, App Engine seguirá tratando de emitir los certificados administrados hasta que se hayan entregado todas las solicitudes.

Para pasar de tus propios certificados SSL a certificados SSL administrados por Google o agregar certificados SSL administrados a una app existente con un dominio personalizado, actualiza la asignación del dominio mediante los siguientes pasos:

  1. En la consola de Google Cloud, ve a App Engine > Configuración > Dominios personalizados:

    Ir a Dominios personalizados

  2. Selecciona el dominio que deseas proteger y haz clic en Habilitar la seguridad administrada.

Inhabilita certificados SSL administrados

Sigue estos pasos para inhabilitar los certificados SSL administrados:

  1. En la consola de Google Cloud, ve a App Engine > Configuración > Dominios personalizados:

    Ir a Dominios personalizados

  2. Elige el dominio y haz clic en Inhabilitar la seguridad administrada.

Usa certificados SSL propios

En vez de usar certificados SSL administrados, puedes usar tu propio certificado. Si el certificado no tiene una prueba de transparencia, es posible que tu aplicación muestre advertencias de SSL en Chrome debido a la aplicación forzosa de la prueba de certificado de transparencia. Para obtener más información acerca de las pruebas de Certificado de transparencia y su cumplimiento, consulta cómo aplicar un certificado de transparencia.

Para usar y administrar certificados SSL propios en vez de los que administra Google, sigue estos pasos:

  1. Asegúrate de haber configurado tu dominio personalizado en tu proyecto de App Engine.

  2. Inhabilita los certificados administrados por Google predeterminados.

  3. Obtén un certificado para tu dominio de la autoridad certificada (CA) que elijas. El procedimiento exacto puede variar según la autoridad.

  4. Convierte tu clave privada y los archivos del certificado SSL en formatos compatibles con App Engine. Antes de subir los archivos, debes convertir tu clave privada en una clave privada RSA y concatenar los certificados SSL en un solo archivo.

  5. Asegúrate de tener los permisos adecuados en la consola de Google Cloud y la propiedad verificada (paso 3) de todos los dominios relacionados o los dominios superiores. Por ejemplo:

    • Si el certificado es para www.example.com, puedes verificar la propiedad de www.example.com o example.com.
    • Si el certificado es para www.example.com y sub.example.com, puedes verificar la propiedad de www.example.com y sub.example.com, o de example.com.
    • Si el certificado es para *.example.com, debes verificar la propiedad de example.com.
  6. Sube tu clave privada y el certificado SSL, y luego asigna tu dominio a la aplicación:

    1. En la consola de Google Cloud, ve a App Engine > Configuración > Certificados SSL:

      Ir a Certificados SSL

    2. Haz clic en Subir un nuevo certificado.

    3. Sube tu certificado SSL concatenado en PEM encoded X.509 public key certificate, por ejemplo, concat.crt y, luego, sube tu clave privada RSA en Clave privada RSA codificada con PEM sin encriptar, por ejemplo, myserver.key.pem.
    4. Haz clic en Subir. Cada certificado SSL que subes es visible y está disponible para que lo usen todos tus otros proyectos de Google Cloud, de modo que no tienes que subir el mismo certificado varias veces.
    5. Selecciona el certificado que quieres asignar a un dominio y haz clic en Guardar para usar SSL en ese dominio.

  7. Para probar tus cambios, visita tu dominio en el navegador mediante https, por ejemplo, https://www.example.com.

Transfiere asignaciones desde un certificado de entrega hacia uno nuevo

Cuando se aproxime la fecha de vencimiento de un certificado, tendrás que subir un certificado nuevo y transferir las asignaciones existentes del certificado antiguo al nuevo. El siguiente procedimiento supone que el certificado existente aún no está vencido y que entrega contenido actualmente en tu dominio personalizado.

Para transferir las asignaciones de un certificado de entrega activo, sigue estos pasos:

  1. Obtén un certificado nuevo para tu dominio de la autoridad certificada (CA) que elijas.

  2. Convierte tu clave privada y los archivos del certificado SSL en formatos compatibles con App Engine.

  3. Sube tu clave privada RSA y el certificado SSL concatenado:

    1. Sube el certificado SSL a la página Certificados SSL.

      Ir a Certificados SSL
      1. Haz clic en Subir un nuevo certificado.

      2. Sube tu certificado SSL concatenado en Certificado de clave pública X.509 codificado con PEM, por ejemplo, concat.crt. Luego, sube tu clave privada RSA en Clave privada RSA codificada con PEM sin encriptar, por ejemplo, myserver.key.pem.
      3. Haz clic en Subir.
    2. Elige el certificado nuevo que acabas de agregar desde la lista de certificados; luego, selecciona el dominio en el que entregaba contenido el certificado antiguo.
    3. Haz clic en Guardar para transferir los mapeos del certificado antiguo al nuevo.

Obtén un certificado

El proceso para obtener un certificado SSL variará según la autoridad certificada que uses. Es posible que tengas que ajustar ligeramente las instrucciones que se proporcionan aquí. Por lo general, cada autoridad certificada proporciona instrucciones para ayudarte durante el proceso.

Para obtener un certificado que puedas usar con tu aplicación de App Engine, sigue estos pasos:

  1. Genera tu clave privada y una solicitud de firma de certificado (CSR) mediante la herramienta openssl:

    1. Ejecuta el siguiente comando desde un directorio en el que quieras crear el archivo server.csr:

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      En el ejemplo anterior, se ilustra lo siguiente:

      • [MY_PRIVATE_KEY].key es el archivo que se generó y en el que se almacena tu clave privada. Ejemplo: myserver.key
      • [MY_CSR].csr es el archivo que se genera para tu solicitud de firma de certificado. Ejemplo: server.csr
    2. Cuando se te solicite, ingresa la siguiente información:

      • Tu código de país de 2 dígitos, por ejemplo: US para Estados Unidos
      • El nombre de tu ciudad
      • El nombre de tu empresa (si no tienes una empresa, puedes usar tu propio nombre)
      • Tu unidad organizativa o NA si no tienes una
      • Un nombre común que represente tu dominio, por ejemplo: www.example.com
      • Tu dirección de correo electrónico

      No es necesario proporcionar los otros valores; son opcionales.

  2. Determina qué autoridad certificada te resulta más adecuada y, luego, compra un certificado. Por ejemplo, puedes usar: SSLMate, Thawte, Comodo o cualquier otra autoridad certificada.

    Para obtener más información sobre los tipos de certificados compatibles, consulta Compatibilidad de App Engine con certificados SSL.

  3. Cuando tu CA solicite el contenido de tu archivo CSR, sigue sus instrucciones para copiar y pegar el contenido desde el archivo .csr que generaste antes, por ejemplo, server.csr.

  4. Sigue las indicaciones cuando tu CA solicite la aprobación del propietario del dominio.

  5. Después de proporcionar la aprobación del propietario del dominio, la CA te envía el certificado, por lo general, en formato de archivo ZIP. Descomprime ese archivo en un directorio de trabajo para que puedas concatenar los certificados y subirlos a App Engine.

Convierte claves privadas y concatena certificados SSL

Debes convertir tu clave privada en una clave privada RSA y concatenar todos los certificados SSL antes de subir la clave privada y los certificados SSL a App Engine.

  1. Convierte el archivo de claves privadas que generaste antes en una clave privada RSA sin encriptar. Por ejemplo, puedes ejecutar el siguiente comando de openssl rsa:

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • [MY_PRIVATE_KEY].key es el archivo que se generó y en el que se almacena tu clave privada. Ejemplo: myserver.key
    • [MY_RSA_KEY].key es el archivo que se generó y el que contiene la clave privada RSA sin encriptar. Ejemplo: myserver.key.pem

      Ejemplo:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Concatena todos los archivos .crt de tu CA en un solo archivo mediante el siguiente comando:

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • [MY_DOMAIN_CERT].crt es el certificado para tu dominio. Ejemplo: www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt y [MY_TrustExternalCARoot].crt son los otros archivos de certificado provistos por tu CA.
    • [MY_CONCAT_CERT].crt es el archivo concatenado que contiene todos los archivos de certificado .crt de tu CA. Ejemplo: concat.crt

      Ejemplo:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Verifica el certificado SSL y la clave privada:

    1. Para verificar que la clave privada y el certificado coincidan, puedes usar los comandos openssl x509 y openssl rsa. Ejemplos:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      Los comandos openssl x509 y openssl rsa deben mostrar el mismo resultado.

    2. Para verificar que un certificado y su cadena de CA son válidos, puedes usar el comando openssl verify. Por ejemplo:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Cuando estés listo, puedes subir tu clave privada RSA y los certificados concatenados a App Engine.

Compatibilidad de App Engine para certificados SSL

App Engine es compatible con los siguientes tipos de certificados:

  • Nombre de host/dominio único
  • Autofirmado
  • Comodín
  • Nombre alternativo del sujeto (SAN)/multidominio

App Engine tiene algunos requisitos para tus claves y certificados:

  • La clave privada y el certificado deben subirse en formato PEM.
  • Las claves privadas no deben estar encriptadas.
  • Un archivo de certificado puede contener como máximo cinco certificados, incluidos los certificados encadenados y los intermedios.
  • Todos los nombres del asunto en el certificado del host deben coincidir o ser subdominios de los dominios verificados del usuario.
  • Las claves privadas deben usar encriptación RSA.
  • Módulo de clave máximo permitido: 2048 bits.

Si el certificado del host requiere un certificado intermedio o en cadena (como lo emiten muchas autoridades certificadoras [CA]), debes que adjuntarlos al final del archivo de certificado público.

Algunas funciones de App Engine usan subdominios especiales. Por ejemplo, una aplicación puede usar subdominios para abordar los servicios o las diferentes versiones de la aplicación. Para usar estas funciones con SSL, es conveniente configurar un certificado SAN o comodín. Los certificados comodín solo admiten un nivel de subdominio.

Quita certificados SSL personalizados

Para dejar de usar un certificado SSL personalizado, realiza los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página de configuración de certificados SSL de App Engine.

    Ir a la configuración de certificados SSL

  2. Haz clic en el certificado que desees quitar de tu dominio.

  3. Anula la selección del nombre de dominio para el que ya no quieres usar el certificado SSL y, luego, haz clic en Guardar.

Usa encabezados Strict-Transport-Security

Por motivos de seguridad, todas las aplicaciones deben alentar a los clientes a usar conexiones https. Para indicarle al navegador que se prefiere https en lugar de http, usa el encabezado Strict-Transport-Security.

Visualiza algoritmos de cifrado y versiones de TLS habilitadas

  1. Si aún no está disponible, instala Network Mapper nmap en tu computadora. Visita https://nmap.org/ para obtener instrucciones de instalación.

  2. Si quieres ver qué algoritmos de cifrado y versiones de TLS se habilitaron para tu app, ingresa el siguiente comando:

    nmap -sV --script ssl-enum-ciphers -p 443 HOSTNAME

    Reemplaza HOSTNAME por el nombre de host de tu app. Puedes usar tu dominio personalizado o el nombre de host appspot.com que App Engine creó para la app. Por ejemplo:

    nmap -sV --script ssl-enum-ciphers -p 443 example.uc.r.appspot.com

Inhabilita cifrados y versiones de TLS

Si usas Cloud Load Balancing y NEG sin servidores a fin de enrutar el tráfico a tu app de App Engine, puedes inhabilitar un algoritmo de cifrado o una versión de TLS con solo definir una política de seguridad de SSL que especifique qué algoritmo de cifrado y versiones de TLS se pueden usar para conexiones HTTPS o SSL.

¿Qué sigue?

Si deseas que Cloud Load Balancing administre las solicitudes entrantes a tu dominio personalizado, consulta Migra el dominio personalizado de App Engine a Cloud Load Balancing.