Protege dominios personalizados con SSL

La asistencia de SSL para tu app de App Engine va más allá del SSL básico, ya que ofrece extremos SSL distribuidos en todo el mundo y un 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 se habilitarán automáticamente mediante certificados SSL administrados. Una vez que tu dominio personalizado se asigne 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 configurar tu dominio personalizado y actualizar los registros DNS, se aprovisionará automáticamente un certificado SSL administrado en pocos minutos. El certificado administrado tiene la firma de Let's Encrypt.

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

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 de SSL debe mostrarse como administrada por Google:

    Seguridad SSL administrada por Google

gcloud
  1. Ejecuta el comando gcloud app domain-mappings a fin de verificar si se aprovisionó 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
    Es posible que el certificado tarde algunos minutos en aprovisionarse. Durante este período, el certificado aparece como PENDING_AUTO_CERT.

Solución de 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 administrado porque los registros DNS no están disponibles, el campo ManagedCertificate.ManagementStatus podría presentar el estado FAILED_RETRYING_NOT_VISIBLE. Verifica que tus registros DNS estén actualizados, espera unos minutos y vuelve a intentarlo. 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 la asignación 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, existe un límite de 20 certificados administrados por semana para cada dominio base. Si llegas a este límite, App Engine seguirá intentando emitir certificados administrados hasta que se completen todas las solicitudes.

Para pasar de tus propios certificados SSL a certificados SSL administrados por Google o agregar certificados SSL administrados a una aplicación existente con un dominio personalizado, actualiza la asignación del dominio con 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. Elige el dominio que quieres asegurar y haz clic en Habilitar seguridad SSL.

    Habilitar la seguridad SSL desde la página de dominios personalizados

gcloud

Ejecuta el comando gcloud app domain-mappings para actualizar la asignación del dominio a tu aplicación:

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

Para actualizar la asignación de dominio de manera programática y trasladar los certificados SSL administrados, consulta el método apps.domainMappings.patch en la API de administrador.

Inhabilita los certificados SSL administrados

Sigue estos pasos para inhabilitar los certificados SSL administrados:

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

    Ir a la página de dominios personalizados

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

    Inhabilitar la seguridad SSL desde la página de dominios personalizados

gcloud

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

  • Para quitar un certificado de una asignación existente, ejecuta el comando gcloud app domain-mappings:

    gcloud app domain-mappings update DOMAIN --certificate-management='MANUAL'
    
  • Para especificar que no se use un certificado SSL administrado cuando asignes un dominio personalizado nuevo a tu aplicación por primera vez, ejecuta el comando siguiente:

    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 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. Si quieres saber más acerca de las pruebas de certificado de transparencia y su cumplimiento, consulta 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, pero puedes consultar Obtener un certificado para ver los pasos típicos.

  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. Si quieres obtener más información, consulta Convertir claves privadas y concatenar certificados SSL.

  5. Asegúrate de tener los permisos necesarios en GCP Console y la propiedad verificada (paso 3) de todos los dominios relacionados o sus 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 el certificado SSL, y luego asigna tu dominio a tu aplicación:

    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 nuevo certificado.

      Subir un 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 está visible y disponible para usar en todos tus proyectos de GCP, por lo que no tienes que subir el mismo certificado reiteradamente.
    5. Selecciona el certificado que quieres asignar a un dominio y haz clic en Guardar para usar SSL en ese dominio.
    gcloud
    1. Ejecuta el comando gcloud app ssl-certificates para subir tu 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

      Aquí:

      • CERT_DISPLAY_NAME es el nombre visible que eliges para el certificado.
        Ejemplo: example.com
      • CERT_DIRECTORY_PATH es la ruta del directorio y el nombre de archivo del certificado.
        Ejemplo: ./cert.crt
      • KEY_DIRECTORY_PATH es la ruta 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 para crear la asignación entre tu dominio y tu app de App Engine con SSL:
      gcloud app domain-mappings create DOMAIN --certificate-id CERT_ID

      Aquí:

      • DOMAIN es el dominio que quieres asignar a tu aplicación de App Engine.
        Ejemplo: *.example.com

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

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

      Ejemplo:

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

  7. Visita tu dominio en el navegador para probar tus cambios con https, por ejemplo, https://www.example.com.

Transfiere asignaciones desde un certificado existente 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. Consulta Obtener un certificado para ver los pasos típicos.

  2. Convierte tu clave privada y los archivos del certificado SSL en formatos compatibles con App Engine. Para obtener más información, consulta Convertir claves privadas y concatenar certificados SSL.

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

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

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

        Subir un certificado
      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. 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 las asignaciones del certificado antiguo al nuevo.
    gcloud

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

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

    Aquí:

    • CERT_ID es el ID del certificado SSL que quieres actualizar.
      Ejemplo: 1234
    • CERT_DIRECTORY_PATH es la ruta del directorio y el nombre de archivo del certificado SSL.
      Ejemplo: ./cert.crt
    • KEY_DIRECTORY_PATH es la ruta 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á 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) usando la herramienta openssl, como se indica a continuación:

    1. Ejecuta el siguiente comando 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 y 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. Por 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 necesitas 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 Certificados SSL compatibles con App Engine.

  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.

    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 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 openssl rsa:

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

    donde:

    • [MY_PRIVATE_KEY].key es el archivo que se genera y en el cual se almacena tu clave privada. Ejemplo: myserver.key
    • [MY_RSA_KEY].key es el archivo que se genera y 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; para ello, usa el siguiente comando:

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

    Aquí:

    • [MY_DOMAIN_CERT].crt es el certificado de 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. Por ejemplo: concat.crt

      Ejemplo:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Verifica tu 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
      

      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 certificadas [CA]), tendrás 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 a fin de dirigir servicios de la aplicación o para dirigir versiones diferentes de tu aplicación. Para usar estas funciones con SSL, es conveniente configurar un certificado con SAN o comodín. Los certificados comodín solo admiten un nivel de subdominio.

Usa encabezados de seguridad de transporte estricta

Por motivos de seguridad, todas las aplicaciones deben fomentar el uso de conexiones https por parte de sus clientes. Puedes usar el encabezado Strict-Transport-Security para indicarle al navegador que prefieres 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 sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Entorno estándar de App Engine para Python 2