Cómo proteger dominios personalizados con SSL

La asistencia de SSL para tu app de App Engine va más allá del SSL básico, gracias a extremos SSL distribuidos en todo el mundo y a un balanceo de cargas incorporado para que tu app funcione de forma segura, confiable y rápida ante un público mundial.

Según la configuración predeterminada, las conexiones HTTPS en tu dominio personalizado se habilitarán automáticamente usando los certificados SSL administrados. Una vez que tu dominio personalizado esté mapeado a tu aplicación y que hayas configurado tus registros DNS, App Engine aprovisiona un certificado SSL administrado, gestiona la renovación del certificado antes de su vencimiento y lo revoca cuando quitas el dominio personalizado de tu aplicación.

Antes de comenzar

Verifica si se aprovisionó un certificado administrado

Después de establecer tu dominio personalizado y actualizar los registros DNS, pasados unos minutos se aprovisiona automáticamente un certificado SSL administrado. El certificado administrado está firmado por Let's Encrypt.

Para verificar que se aprovisionó un certificado administrado, sigue estos pasos:

Console
  1. En Google Cloud Platform Console, ve a App Engine > Configuración > Dominios personalizados:

    Ir a la página de dominios personalizados

  2. La seguridad SSL debería mostrarse como administrada por Google:

    Seguridad SSL administrada por Google

gcloud
  1. Ejecuta el siguiente comando gcloud app domain-mappings y verifica que se ha aprovisionado el certificado para tu app de App Engine:

    gcloud app domain-mappings list
  2. Deberías ver una lista de tus dominios, subdominios y todos sus certificados correspondientes, por ejemplo:

    ID               SSL_CERTIFICATE_ID
    example.com      123456
    www.example.com  234567
    Aprovisionar el certificado puede tardar algunos minutos. Mientras tanto, el certificado aparece como PENDING_AUTO_CERT.

Solución de problemas de certificados SSL administrados

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

  • Puedes comprobar el estado de tu certificado con la API de administrador usando una solicitud AuthorizedCertificate.GET request.

  • Si no se aprovisionó el certificado administrado porque los registros DNS no están disponibles, el campo ManagedCertificate.ManagementStatus puede estar como FAILED_RETRYING_NOT_VISIBLE. Verifica que tus registros DNS estén actualizados, espera algunos minutos y luego inténtalo de nuevo. Los registros DNS pueden demorar hasta 24 horas para estar disponibles.

  • Si el estado es FAILED_PERMANENT, entonces los intentos de renovación han fracasado. Comprueba tu configuración de DNS y luego actualiza el mapeo de tu dominio personalizado siguiendo los pasos para actualizar a 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 mapeos con comodines.

Si usas subdominios, existe un límite de 20 certificados administrados por semana para cada dominio base. Si te topas con este límite, App Engine seguirá tratando de emitir certificados administrados hasta que todas las solicitudes hayan sido entregadas.

Para pasar de tus propios certificados SSL a certificados SSL administrados por Google, o para agregar certificados SSL administrados a una app existente con un dominio personalizado, actualiza el mapeo del dominio:

Console
  1. En Google Cloud Platform Console, ve a App Engine > Configuración > Dominios personalizados:

    Ir a la página de dominios personalizados

  2. Selecciona el dominio que quieras proteger y haz clic en Habilitar seguridad SSL.

    Habilitar seguridad SSL desde la página de dominios personalizados

gcloud

Ejecuta el siguiente comando de gcloud app domain-mappings para actualizar el mapeo del dominio a tu aplicación.

gcloud app domain-mappings update DOMAIN --certificate-management='AUTOMATIC'
API

Si quieres actualizar el mapeo de tu dominio de manera programática para pasar a certificados SSL administrados, consulta el método apps.domainMappings.patch en la API de administrador.

Inhabilita los certificados SSL administrados

Para inhabilitar los certificados SSL administrados, sigue los siguientes pasos:

Console
  1. En Google Cloud Platform Console, ve a App Engine > Configuración > Dominios personalizados:

    Ir a la página de dominios personalizados

  2. Selecciona el dominio y haz clic en Inhabilitar seguridad SSL.

    Inhabilitar seguridad SSL desde la página de dominios personalizados

gcloud

Puedes inhabilitar un certificado SSL administrado que ya está asociado con un mapeo de dominio. También puedes elegir no usar un certificado SSL administrado cuando mapeas el dominio personalizado por primera vez.

  • Para quitar un certificado de un mapeo existente, ejecuta el comando gcloud app domain-mappings siguiente:

    gcloud app domain-mappings update DOMAIN --certificate-management='MANUAL'
    
  • Para especificar que no usas un certificado SSL administrado cuando mapeas un dominio personalizado nuevo a tu aplicación por primera vez, sigue los siguientes pasos:

    gcloud app domain-mappings create DOMAIN --certificate-management='MANUAL'
    
API

Para inhabilitar los certificados SSL administrados de manera programática, especifica la administración de SSL manual con el método apps.domainMappings.patch en la API de administrador.

Usa certificados SSL propios

En vez de usar certificados SSL administrados, puedes usar tu propio certificado. Si tu certificado no tiene comprobante de transparencia, tu app puede mostrar advertencias SSL en Chrome debido a la aplicación forzosa de certificados de transparencia. Para obtener más información acerca de los certificados de transparencia, consulta Aplicar certificados de transparencia.

Para usar y administrar tus propios certificados SSL en vez de los que administra Google, sigue los siguientes 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 parte de la autoridad certificada (CA) que elijas. El procedimiento exacto puede variar según la autoridad, pero puedes consultar Obtener un certificado para ver los pasos típicos.

  4. Convierte tu clave privada y los archivos de certificados SSL a formatos compatibles con App Engine. Para poder subir los archivos, debes convertir tu clave privada a una clave privada RSA y concatenar los certificados SSL en un solo archivo. Para obtener más información, consulta Convertir claves privadas y concatenar certificados SSL.

  5. Asegúrate de tener los permisos apropiados en GCP Console y la propiedad verificada (paso 3) de todos los dominios relacionados o dominios superiores. Por ejemplo:

    • Si el certificado es para www.example.com puedes verificar la propiedad de www.example.com o de 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 los certificados SSL y mapea tu dominio a tu app:

    Console
    1. En Google Cloud Platform Console, ve a App Engine > Configuración > Certificados SSL:

      Ir a la página de certificados SSL

    2. Haz clic en Subir un certificado nuevo.

      Subir un cert
    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 está visible y disponible para usar en todos tus proyectos de GCP, así no tienes que subir el mismo certificado repetidamente.
    5. Selecciona el certificado que quieras asignar a un dominio y haz clic Guardar para usar SSL en ese dominio.
    gcloud
    1. Ejecuta el comando gcloud app ssl-certificates siguiente para subir el certificado SSL y tu clave privada:
      gcloud app ssl-certificates create --display-name CERT_DISPLAY_NAME --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

      donde:

      • CERT_DISPLAY_NAME es el nombre visible que eliges para el certificado.
        Ejemplo: example.com
      • CERT_DIRECTORY_PATH es la ruta de acceso del directorio y el nombre de archivo del certificado.
        Ejemplo: ./cert.crt
      • KEY_DIRECTORY_PATH es la ruta de acceso del directorio y el nombre de archivo de la clave privada.
        Ejemplo: ./private.key

      Ejemplo:

      gcloud app ssl-certificates create --display-name example.com --certificate ./cert.crt --private-key ./private.key
    2. Ejecuta el comando gcloud app domain-mappings siguiente para crear el mapeo entre tu dominio y tu app de App Engine usando SSL:
      gcloud app domain-mappings create DOMAIN --certificate-id CERT_ID

      donde:

      • DOMAIN es el dominio que quieres mapear a tu app de App Engine.
        Ejemplo: *.example.com

        Sugerencia: Puedes poner el dominio entre comillas si recibes un error cuando usas el mapeo con comodines: '*.example.com'

      • CERT_ID es el ID del certificado que quieres usar para SSL.
        Ejemplo: --certificate-id 1234

      Ejemplo:

      gcloud app domain-mappings create '*.example.com' 1234

  7. Prueba tus cambios visitando tu dominio en el navegador usando https, por ejemplo, https://www.example.com.

Cómo transferir mapeos de un certificado en funcionamiento a un certificado nuevo

Cuando se aproxima la fecha de vencimiento de un certificado, tendrás que subir un nuevo certificado y transferir los mapeos existentes para el certificado viejo al certificado nuevo. El procedimiento siguiente supone que el certificado existente aún no está vencido y que funciona actualmente en tu dominio personalizado.

Para transferir los mapeos de un certificado en funcionamiento activo, sigue estos pasos:

  1. Obtén un certificado nuevo para tu dominio de parte de la autoridad certificada (CA) que elijas. Consulta Obtener un certificado para ver los pasos típicos.

  2. Convierte tu clave privada y los archivos de certificados SSL a formatos compatibles con App Engine. Para más detalles, consulta Convertir claves privadas y concatenar certificados SSL.

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

    Console
    1. Subir el certificado SSL en la página de certificados SSL.

      Ir a la página de certificados SSL.
      1. Haz clic en Subir un certificado nuevo.

        Subir un cert
      2. Sube tu certificado SSL concatenado en Certificado de clave pública X.509 codificado con PEM, 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.
      3. Haz clic en Subir.
    2. Selecciona el certificado nuevo que acabas de agregar desde la lista de certificados, luego selecciona el dominio en el que funcionaba el certificado viejo.
    3. Haz clic en Guardar para transferir los mapeos del certificado viejo al certificado nuevo.
    gcloud

    Ejecuta el siguiente comando gcloud app ssl-certificates para actualizar el certificado SSL y la clave privada:

    gcloud app ssl-certificates update CERT_ID --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

    donde:

    • CERT_ID es el ID del certificado SSL que quieres actualizar.
      Ejemplo: 1234
    • CERT_DIRECTORY_PATH es la ruta de acceso del directorio y el nombre de archivo del certificado SSL.
      Ejemplo: ./cert.crt
    • KEY_DIRECTORY_PATH es la ruta de acceso del directorio y el nombre de archivo de la clave privada.
      Ejemplo: ./private.key

    Ejemplo:

    gcloud app ssl-certificates update 1234 --certificate ./cert.crt --private-key ./private.key

Obtén un certificado

El proceso para obtener un certificado SSL variará en función de la autoridad certificada que uses. Puede que tengas que ajustar ligeramente las instrucciones que se muestran aquí. Por lo general, cada autoridad certificada provee instrucciones para ayudarte durante el proceso.

Si quieres obtener un certificado para usar con tu app de App Engine, sigue estos pasos:

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

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

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

      donde:

      • [MY_PRIVATE_KEY].key es el archivo que se genera en el cual 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. Puedes usar tu propio nombre si no tienes una empresa.
      • Tu unidad organizativa o NA si no tienes.
      • Un nombre común que represente tu dominio, por ejemplo: www.example.com
      • Tu dirección de correo electrónico.

      No necesitas proveer los otros valores, son todos opcionales.

  2. Determina qué autoridad certificada funciona para ti y luego compra un certificado. Por ejemplo, puedes usar: SSLMate, Thawte, Comodo o cualquier otra autoridad certificada.

    Para ver más detalles acerca de los tipos de certificados compatibles, consulta Certificados SSL compatibles con App Engine.

  3. Cuando tu CA te solicite los contenidos de tu archivo CSR, sigue sus instrucciones para copiar y pegar contenidos del archivo.csr que generaste antes, por ejemplo, server.csr.

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

    Sugerencia: Puede resultarte más fácil usar el método de aprobación por correo electrónico. Tendrás que configurar una dirección de correo electrónico en la cuenta de tu dominio, por ejemplo, admin@example.com, para poder recibir y responder la solicitud de aprobación de la CA.

  5. Después de que des 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 clave privada que generaste antes en una clave privada RSA sin encriptar. Por ejemplo, puedes ejecutar el comando openssl rsa siguiente:

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

    donde:

    • [MY_PRIVATE_KEY].key es el archivo que se genera que contiene tu clave privada. Ejemplo: myserver.key
    • [MY_RSA_KEY].key es el archivo que se genera 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, usando el comando siguiente:

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

    donde:

    • [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 tus 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 tu 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
      

      El comando openssl x509 y el comando openssl rsa deberían mostrar el mismo resultado.

    2. Para verificar que un certificado y su cadena CA sean 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 tus certificados concatenados a App Engine.

Certificados SSL compatibles con App Engine

Los siguientes tipos de certificados son compatibles con App Engine:

  • 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 pueden estar encriptadas.
  • Un archivo de certificado puede contener como máximo cinco certificados, incluidos los certificados encadenados y los intermedios.
  • Todos los nombres de sujeto en el certificado del host deben coincidir o ser subdominios de los dominios del usuario verificados.
  • 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 encadenado (como emiten muchas autoridades certificadas), tendrás que adjuntar los certificados intermedios o encadenados al final del archivo de certificado público.

Algunas características de App Engine usan subdominios especiales. Por ejemplo, una aplicación puede usar subdominios para dirigir servicios de la aplicación o para dirigir versiones diferentes de tu aplicación. Para usar estas funciones con SSL, es conveniente establecer un certificado con SAN o comodín. Los certificados con comodín solo son compatibles con un nivel de subdominio.

Usa encabezados de seguridad de transporte estricta

Por motivos de seguridad, todas las aplicaciones deberían fomentar el uso de conexiones https de parte de sus clientes. Puedes usar el encabezado Strict-Transport-Security para indicar al navegador que prefiera https en vez de http.

Debes implementar HTTP con Seguridad de transporte estricta con precaución, ya que los clientes que hayan recibido el encabezado en el pasado rechazarán la conexión si https se vuelve no funcional o si se inhabilita por algún motivo. Para obtener más información, consulta la Hoja de referencia sobre HTTP con Seguridad de transporte estricta.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Python