Configura la TLS con autenticación de backend

En esta página, se proporcionan instrucciones para configurar la TLS con autenticación de backend, también conocida como autenticación de backend, con certificados autoadministrados.

Para configurar la TLS con autenticación de backend, debes hacer lo siguiente. Estos pasos se describen en las siguientes secciones de este documento.

  • Crea un recurso de configuración de confianza que conste de certificados raíz e intermedios.
  • Crea un recurso de configuración de autenticación de backend que haga referencia a la configuración de confianza.
  • Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas.

Antes de comenzar

Permisos

En esta sección, se enumeran los permisos necesarios para configurar la TLS con autenticación de backend.
Operación Permiso
Crea una configuración de confianza certificatemanager.trustconfigs.create en el Google Cloud proyecto de destino
Crea un recurso de configuración de autenticación de backend
  • certificatemanager.certs.use en el certificado de destino
  • certificatemanager.trustconfigs.use en la configuración de confianza de destino
  • networksecurity.backendauthenticationconfigs.create en el proyecto Google Cloud de destino
  • Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas.
  • compute.backendservice.update en el servicio de backend de destino
  • networksecurity.backendauthenticationconfigs.use en el recurso de configuración de autenticación de backend de destino
  • Descripción general de la configuración

    En las siguientes secciones, se describen los pasos para configurar TLS autenticado por el backend según la arquitectura que se muestra en el siguiente diagrama.

    Componentes de la TLS con autenticación de backend.
    Componentes de TLS con autenticación de backend (haz clic para ampliar).

    Crea los certificados raíz e intermedio

    En esta sección, se usa la biblioteca OpenSSL para crear el certificado raíz (ancla de confianza) y el certificado intermedio.

    Un certificado raíz se encuentra en la parte superior de la cadena de certificados. Un certificado intermedio forma parte de la cadena de confianza que se remonta al certificado raíz. El certificado intermedio está firmado de forma criptográfica por el certificado raíz. Cuando el balanceador de cargas recibe un certificado de servidor, lo valida estableciendo una cadena de confianza desde el certificado de servidor hasta la entidad de certificación configurada.

    Usa los siguientes comandos para crear los certificados raíz e intermedio.

    1. Crea un archivo de configuración de OpenSSL.

      En el siguiente ejemplo, el archivo de configuración (example.cnf) contiene la sección [ca_exts], que especifica extensiones X.509 que marcan el certificado como adecuado para una CA. Para obtener más información sobre los requisitos de los certificados raíz e intermedios, consulta Requisitos de los certificados.

      cat > example.cnf << EOF
      [req]
      distinguished_name = empty_distinguished_name
      
      [empty_distinguished_name]
      # Kept empty to allow setting via -subj command-line argument.
      
      [ca_exts]
      basicConstraints=critical,CA:TRUE
      keyUsage=keyCertSign
      extendedKeyUsage=serverAuth
      
      EOF
      
    2. Crea un certificado raíz X.509 autofirmado (root.cert). El certificado raíz se autofirma con su propia clave privada (root.key).

      openssl req -x509 \
          -new -sha256 -newkey rsa:2048 -nodes \
          -days 3650 -subj '/CN=root' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout root.key -out root.cert
      
    3. Crea la solicitud de firma de certificado (CSR) int.req para el certificado intermedio.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -subj '/CN=int' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout int.key -out int.req
      
    4. Firma la CSR para crear el certificado intermedio X.509 (int.cert). La CSR se firma con el certificado raíz.

      openssl x509 -req \
          -CAkey root.key -CA root.cert \
          -set_serial 1 \
          -days 3650 \
          -extfile example.cnf \
          -extensions ca_exts \
          -in int.req -out int.cert
      

    Da formato a los certificados

    Para incluir certificados nuevos o existentes en un almacén de confianza, debes dar formato a los certificados en una sola línea y almacenarlos en variables de entorno para que se pueda hacer referencia a ellos en el archivo YAML de configuración de confianza.

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Crea una configuración de confianza

    Una configuración de confianza es un recurso que representa la configuración de tu infraestructura de clave pública (PKI) en Certificate Manager.

    Para crear un recurso de configuración de confianza, completa los siguientes pasos:

    Console

    1. En la consola de Google Cloud , ve a la página Certificate Manager.

      Ir al Administrador de certificados

    2. En la pestaña Trust Configs, haz clic en Add Trust Config.

    3. Ingresa un nombre para la configuración.

    4. En Ubicación, selecciona Global o Regional.

      La ubicación indica dónde se almacena el recurso de configuración de confianza. Para los balanceadores de cargas de aplicaciones externos globales, crea un recurso de configuración de confianza global. Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, crea un recurso de configuración de confianza regional.

    5. En la sección Almacén de confianza, haz clic en Agregar ancla de confianza y sube el archivo de certificado con codificación PEM o copia el contenido del certificado.

    6. Haz clic en Agregar.

    7. En la sección Almacén de confianza, haz clic en Agregar CA intermedia y sube el archivo de certificado con codificación PEM o copia el contenido del certificado. Este paso te permite agregar otro nivel de confianza entre el certificado raíz y el certificado del servidor.

    8. Haz clic en Agregar para agregar la CA intermedia.

    9. Para agregar el certificado que agregaste a la lista de entidades permitidas, haz clic en Agregar.

    10. Haz clic en Crear.

    Verifica que el nuevo recurso de configuración de confianza aparezca en la lista de configuraciones.

    gcloud

    1. Crea un archivo YAML de configuración de confianza (trust_config.yaml) que especifique los parámetros de configuración de confianza. Este recurso de configuración de confianza de ejemplo contiene un almacén de confianza con un ancla de confianza y un certificado intermedio. Este recurso de configuración de confianza de ejemplo lee el contenido del certificado de las variables de entorno creadas en el paso anterior Da formato a los certificados.

      cat << EOF > trust_config.yaml
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT_CERT}"
        intermediateCas:
        - pemCertificate: "${INTERMEDIATE_CERT}"
      EOF
      

      Para crear un almacén de confianza con anclas de confianza adicionales o certificados intermedios, agrega filas pemCertificate en la sección adecuada.

    2. Para importar el archivo YAML de configuración de confianza, usa el comando gcloud certificate-manager trust-configs import.

      global

      Para los balanceadores de cargas de aplicaciones externos globales, especifica global como la ubicación en la que se almacena el recurso de configuración de confianza.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
          --source=trust_config.yaml \
          --location=global
      

      Reemplaza TRUST_CONFIG_NAME por el nombre de la configuración de confianza.

      regional

      Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, especifica la región en la que se almacena el recurso de configuración de confianza.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
          --source=trust_config.yaml \
          --location=REGION
      

      Reemplaza lo siguiente:

      • TRUST_CONFIG_NAME: el nombre del recurso de configuración de confianza
      • REGION: la región en la que se almacena el recurso de configuración de confianza

    Crea un recurso de configuración de autenticación de backend

    Para crear un recurso de configuración de autenticación de backend (BackendAuthenticationConfig), completa los siguientes pasos.

    Console

    1. En la consola de Google Cloud , ve a la página Configuración de autenticación.

      Ir a Configuración de autenticación

    2. En la pestaña Backend Authentication, haz clic en Create.
    3. Ingresa un nombre para el recurso de configuración de autenticación de backend.
    4. En Ubicación, selecciona Global o Regional.
    5. Opcional: Selecciona las raíces de confianza públicas.
    6. Selecciona el recurso de configuración de confianza que creaste antes.
    7. Haz clic en Crear.

    Verifica que se muestre el recurso de configuración de autenticación de backend.

    gcloud

    1. Crea un archivo YAML que especifique de forma declarativa los diferentes atributos del recurso de configuración de autenticación del backend.

      global

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Reemplaza lo siguiente:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : Es el nombre del archivo YAML en el que se define el recurso de configuración de la autenticación de backend.
      • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend
      • TRUST_CONFIG_NAME: Es el nombre del recurso de configuración de confianza que creaste antes.

      regional

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Reemplaza lo siguiente:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : Es el nombre del archivo YAML en el que se define el recurso de configuración de autenticación de backend.
      • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
      • REGION: es el nombre de la región.
      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend
      • TRUST_CONFIG_NAME: Es el nombre del recurso de configuración de confianza que creaste antes.
    2. Para importar la configuración de autenticación de backend, usa el comando gcloud network-security backend-authentication-configs import.

      global

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=global
      

      Reemplaza lo siguiente:

      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: el nombre del archivo YAML en el que se define el recurso de configuración de autenticación de backend

      regional

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=REGION
      

      Reemplaza lo siguiente:

      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: el nombre del archivo YAML en el que se define el recurso de configuración de autenticación de backend

      • REGION: es el nombre de la región.

    Adjunta el recurso de configuración de autenticación de backend al servicio de backend del balanceador de cargas

    Para adjuntar la configuración de autenticación de backend (recurso BackendAuthenticationConfig) al servicio de backend del balanceador de cargas, completa los siguientes pasos.

    Console

    1. En la consola de Google Cloud , ve a la página Balanceo de cargas.

      Ir a Balanceo de cargas

    2. En la pestaña Backends, selecciona el servicio de backend para el que necesitas habilitar la TLS con autenticación de backend y la mTLS de backend.

    3. Haz clic en Editar.

    4. Expande la sección Configuración avanzada.

    5. En la sección Autenticación de backend, selecciona la casilla de verificación Habilitar.

    6. Opcional: Especifica el nombre de host de SNI y los SAN aceptados para validar el certificado de backend.

    7. Para adjuntar el recurso de configuración de autenticación de backend al servicio de backend, en la lista Configuración de autenticación de backend, selecciona el recurso de configuración de autenticación de backend.

    8. Haz clic en Continuar.

    9. Para actualizar la configuración del servicio de backend, haz clic en Actualizar.

    gcloud

    1. Para enumerar todos los recursos de servicio de backend en tu proyecto, usa el comando gcloud compute backend-services list.

      gcloud compute backend-services list
      

      Toma nota del nombre del servicio de backend al que se adjuntará el recurso BackendAuthenticationConfig. Este nombre se denomina BACKEND_SERVICE_NAME en los siguientes pasos.

    2. Para exportar la configuración del servicio de backend a un archivo, usa el comando gcloud compute backend-services export.

      global

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
      • BACKEND_SERVICE_FILENAME: Es el nombre y la ruta de acceso a un archivo YAML en el que se exporta la configuración del servicio de backend.

      regional

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --region=REGION
      

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
      • BACKEND_SERVICE_FILENAME: Es el nombre y la ruta de acceso a un archivo YAML en el que se exporta la configuración del servicio de backend.
      • REGION: El nombre de laGoogle Cloud región en la que se encuentra el servicio de backend
    3. Actualiza el atributo tlsSettings del servicio de backend para que apunte al recurso de configuración de autenticación de backend. Además, puedes configurar el nombre de host de SNI y los SAN aceptados en el servicio de backend para validar el certificado de backend.

      global

      Adjunta el recurso de configuración de autenticación de backend global al servicio de backend.

      Los valores de SNI y SAN en la siguiente declaración de YAML solo se proporcionan como ejemplos. Puedes reemplazarlos por valores del mundo real que sean relevantes para tu configuración.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_FILENAME: Es el nombre del archivo YAML en el que se exporta la configuración del servicio de backend.

      • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .

      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend

      regional

      Adjunta el recurso de configuración de autenticación de backend regional al servicio de backend.

      Los valores de SNI y SAN en la siguiente declaración de YAML solo se proporcionan como ejemplos. Puedes reemplazarlos por valores del mundo real que sean relevantes para tu configuración.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_FILENAME: Es el nombre del archivo YAML en el que se exporta la configuración del servicio de backend.

      • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .

      • REGION: Es el nombre de laGoogle Cloud región en la que se crea la configuración de autenticación del backend.

      • BACKEND_AUTH_CONFIG_NAME: El nombre del recurso de configuración de autenticación de backend

    4. Para importar la configuración actualizada del servicio de backend desde un archivo, usa el comando gcloud compute backend-services import.

      global

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --global
      

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
      • BACKEND_SERVICE_FILENAME: el nombre del archivo YAML de configuración del servicio de backend

      regional

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --region=REGION
      

      Reemplaza lo siguiente:

      • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
      • BACKEND_SERVICE_FILENAME: el nombre del archivo YAML de configuración del servicio de backend
      • REGION: El nombre de laGoogle Cloud región en la que se encuentra el servicio de backend

    Crea un certificado de servidor de backend

    En esta sección, se proporciona una opción de configuración adicional para crear un certificado de servidor (hoja) firmado por el certificado intermedio, que forma parte de la configuración de confianza. Esto garantiza que se pueda establecer una cadena de confianza desde el certificado del servidor hasta la entidad de certificación raíz.

    Si ya creaste un recurso de configuración de confianza que contiene un certificado intermedio, haz lo siguiente:

    1. Crea un archivo de configuración para generar la CSR del certificado del servidor.

      El siguiente archivo de configuración (server.config) contiene la sección [extension_requirements], que especifica las extensiones X.509 que se incluirán en la CSR. Para obtener más información sobre los requisitos de los certificados de servidor, consulta Requisitos de los certificados.

      cat > server.config << EOF
      [req]
      default_bits              = 2048
      req_extensions            = extension_requirements
      distinguished_name        = dn_requirements
      prompt                    = no
      
      [extension_requirements]
      basicConstraints          = critical, CA:FALSE
      keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
      extendedKeyUsage          = serverAuth
      subjectAltName            = @alt_names
      
      [alt_names]
      DNS.1 = examplepetstore.com
      DNS.2 = api.examplepetstore.com
      
      [dn_requirements]
      countryName               = US
      stateOrProvinceName       = California
      localityName              = San Francisco
      0.organizationName        = example
      organizationalUnitName    = test
      commonName                = examplepetstore.com
      emailAddress              = test@examplepetstore.com
      
      EOF
      
    2. Crea la CSR (server.csr) para el certificado del servidor.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -config server.config \
          -keyout server.key -out server.csr
      
    3. Firma la CSR para emitir el certificado del servidor X.509 (server.cert). El certificado intermedio firma la CSR.

      openssl x509 -req \
          -CAkey int.key -CA int.cert \
          -days 365 \
          -extfile server.config \
          -extensions extension_requirements \
          -in server.csr -out server.cert
      

      Cuando el balanceador de cargas se conecta al servidor de backend, este presenta su certificado (server.cert) para autenticarse en el balanceador de cargas, lo que completa el proceso de autenticación de backend.

    Opciones de configuración adicionales de SSL en un servidor web Apache

    En esta sección opcional, se explica el proceso para actualizar las opciones de configuración SSL en un servidor Apache según los certificados de servidor que creaste anteriormente.

    1. Copia la clave privada del servidor (server.key) y el certificado del servidor (server.cert) en el servidor web de Apache.

          cat > server.key << EOF
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
          EOF
      
          sudo cp ./server.key /etc/ssl/private/server.key
          

      Reemplaza [...] por la clave privada del servidor codificada en PEM que creaste antes.

          cat > server.cert << EOF
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
          EOF
      
          sudo cp ./server.cert /etc/ssl/certs/server.cert
          

      Reemplaza [...] por el certificado del servidor codificado en PEM que creaste antes.

    2. Actualiza la configuración de SSL del servidor web Apache.

      Actualiza la configuración SSL de Apache para habilitar el tráfico HTTPS con el certificado SSL y la clave privada especificados.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLCertificateFile      /etc/ssl/certs/server.cert
          SSLCertificateKeyFile /etc/ssl/private/server.key
          ----
          
    3. Vuelve a generar el hash de los certificados de CA.

          sudo c_rehash /etc/ssl/certs/
          
    4. Reinicia el servidor web Apache para aplicar los cambios.

          sudo systemctl restart apache2.service
          

    ¿Qué sigue?