Configurar una TLS mutua con certificados proporcionados por el usuario

En esta página, se proporcionan instrucciones para crear un certificado raíz y un certificado intermedio firmado y, luego, para subir esos certificados a un recurso TrustConfig de Certificate Manager. Si tienes certificados existentes para subir, omite los pasos para crear certificados nuevos.

También debes crear los recursos de seguridad de red necesarios para configurar la TLS mutua (mTLS) para los balanceadores de cargas de aplicaciones. Las instrucciones usan OpenSSL para crear los certificados raíz e intermedios.

Antes de comenzar

  • Revisa la descripción general de la TLS mutua.
  • Revisa las configuraciones de confianza.
  • Instala Google Cloud CLI. Para obtener una descripción general completa de la herramienta, consulta la descripción general de la CLI de gcloud. Encontrarás comandos relacionados con el balanceo de cargas en la referencia de la API y la CLI de gcloud.

    Si no ejecutaste la CLI de gcloud antes, ejecuta primero el comando gcloud init para autenticarte.

  • Habilita las APIs: API de Compute Engine, Certificate Manager API, Seguridad de redes y la API de Servicios de red.

  • Si usas el balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico, asegúrate de haber configurado un balanceador de cargas con cualquiera de los siguientes backends compatibles:

    • Backends de grupos de instancias de VM
    • Buckets de Cloud Storage (compatibles solo si hay al menos un servicio de backend conectado al balanceador de cargas, además del bucket de backend)
    • Backend de Cloud Run, App Engine o Cloud Run Functions
    • Conectividad híbrida
  • Si usas un balanceador de cargas de aplicaciones externo regional, un balanceador de cargas de aplicaciones interno entre regiones o un balanceador de cargas de aplicaciones interno regional, asegúrate de haber configurado un balanceador de cargas con cualquiera de los siguientes backends admitidos:

    • Backends de grupos de instancias de VM
    • Cloud Run
    • Conectividad híbrida
  • Configura tu proyecto.

    gcloud

    gcloud config set project PROJECT_ID
    

Permisos

Para obtener los permisos que necesitas a fin de completar esta guía, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

  • Para crear recursos del balanceador de cargas, como TargetHTTPSProxy: Administrador de balanceador de cargas de Compute (roles/compute.loadBalancerAdmin)
  • Para usar recursos de Certificate Manager: Propietario de Certificate Manager (roles/certificatemanager.owner)
  • Para crear componentes de seguridad y de herramientas de redes: Administrador de red de Compute (roles/compute.networkAdmin) y Administrador de seguridad de Compute (roles/compute.securityAdmin)
  • Para crear un proyecto (opcional): Creador de proyectos (roles/resourcemanager.projectCreator)

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Genera una clave y certificados firmados

En esta sección, se usan comandos openssl para crear certificados raíz e intermedios.

Usa los siguientes comandos para generar un certificado raíz y un certificado intermedio firmado con los campos keyUsage y extendedKeyUsage válidos.

  1. Crea un archivo example.cnf de muestra con la configuración mínima necesaria para crear certificados de firma válidos. Puedes editar este archivo si deseas configurar campos adicionales en estos certificados.

    cat > example.cnf << EOF
    [req]
    distinguished_name = empty_distinguished_name
    [empty_distinguished_name]
    # Kept empty to allow setting via -subj command line arg.
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    EOF
    
  2. Crea el certificado raíz.

    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 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. Crea el certificado intermedio.

    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
    

Genera un certificado y agrégalo a una lista de entidades permitidas

En esta sección, se usan comandos openssl para crear un certificado de muestra y agregarlo a una lista de entidades permitidas.

Usa los siguientes comandos para generar un certificado y agregarlo a una lista de entidades permitidas.

   openssl req -x509 \
       -new -sha256 -newkey rsa:2048 -nodes \
       -days 3650 -subj '/CN=localhost' \
       -keyout allowlisted.key -out allowlisted.cert

Da formato a los certificados

Para incluir certificados nuevos o existentes en un TrustStore, debes dar formato a los certificados en una sola línea y almacenarlos en variables de entorno para que se puedan leer en el archivo YAML. Usa los siguientes comandos para dar formato a los certificados y almacenarlos en variables de entorno:

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')

Para incluir certificados nuevos o existentes que se agregan a una lista de entidades permitidas en una configuración de confianza, debes dar formato a los certificados en una sola línea y almacenarlos en variables de entorno para que se puedan leer en el archivo YAML. Para los certificados que están en una lista de entidades permitidas, usa el siguiente comando para dar formato a los certificados en una sola línea y almacenarlos en la variable de entorno ALLOWLISTED_CERT.

export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')

Crea un recurso TrustConfig

Crea un recurso TrustConfig de Certificate Manager que represente tu PKI. Este recurso TrustConfig de ejemplo contiene un almacén de confianza con dos anclas de confianza y dos certificados de CA intermedios. Lee el contenido del certificado de las variables de entorno creadas en el paso anterior Da formato a los certificados.

Para crear un almacén de confianza con anclas de confianza adicionales o certificados de CA intermedios, agrega filas pemCertificate en la sección adecuada. Si tienes menos anclajes de confianza o certificados de CA intermedios, quita las líneas innecesarias.

Este recurso TrustConfig de ejemplo contiene un certificado que se agrega a una lista de entidades permitidas. Puedes especificar varios certificados en una lista de entidades permitidas; para ello, usa varias instancias del campo pemCertificate.

En los siguientes pasos, reemplaza TRUST_CONFIG_NAME por el nombre del recurso TrustConfig:

  1. Para crear el archivo trust_config.yaml con un almacén de confianza, usa el siguiente comando:

    cat << EOF > trust_config.yaml
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT_CERT?}"
      - pemCertificate: "${ROOT_CERT_2?}"
      intermediateCas:
      - pemCertificate: "${INTERMEDIATE_CERT?}"
      - pemCertificate: "${INTERMEDIATE_CERT_2?}"
    EOF
    
  2. Opcional: Para crear el archivo trust_config.yaml con un certificado que se agrega a una lista de entidades permitidas, usa el siguiente comando:

    cat << EOF >> trust_config.yaml
    allowlistedCertificates:
    - pemCertificate: "${ALLOWLISTED_CERT?}"
    EOF
    
  3. Para crear los recursos TrustConfig de Certificate Manager, usa el comando gcloud certificate-manager trust-configs import:

    global

    Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa este comando:

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

    regional

    Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa este comando:

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

Crea los recursos de autenticación de clientes

Un recurso de autenticación de cliente (también llamado ServerTLSPolicy) te permite especificar el modo de TLS del servidor y el recurso TrustConfig que se usará cuando se validen los certificados de cliente. Cuando el cliente presenta un certificado no válido o ningún certificado al balanceador de cargas, clientValidationMode especifica cómo se maneja la conexión del cliente. Para obtener más información, consulta los modos de validación del cliente de mTLS.

  • Cuando clientValidationMode se establece como ALLOW_INVALID_OR_MISSING_CLIENT_CERT, todas las solicitudes se pasan al backend, incluso si la validación falla o si falta el certificado de cliente.
  • Cuando clientValidationMode se establece en REJECT_INVALID, solo las solicitudes que proporcionan un certificado de cliente que se puede validar en un recurso TrustConfig se pasan al backend.

Para crear el recurso ServerTLSPolicy, completa los siguientes pasos:

  1. Según cómo desees manejar la conexión, selecciona una de las siguientes opciones.

    En los siguientes pasos, reemplaza SERVER_TLS_POLICY_NAME por el nombre de la política de TLS del servidor y reemplaza PROJECT_ID por el ID de tu proyecto de Google Cloud.

    • Opción 1: clientValidationMode se establece en ALLOW_INVALID_OR_MISSING_CLIENT_CERT.

      Para crear el archivo server_tls_policy.yaml, usa el siguiente comando:

      global

      Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Opción 2: clientValidationMode se establece en REJECT_INVALID.

      Para crear el archivo server_tls_policy.yaml, usa el siguiente comando:

      global

      Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
  2. Para crear el recurso ServerTlsPolicy, usa el comando gcloud network-security server-tls-policies import:

    global

    Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    regional

    Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=REGION
    
  3. Opcional: Enumera todos los recursos de autenticación de clientes (ServerTlsPolicies) en la ubicación especificada del proyecto actual.

    Console

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

      Ir a Autenticación de clientes

    2. Se muestran todos los recursos ServerTlsPolicies.

    gcloud

    Para enumerar todos los recursos de autenticación de clientes (ServerTlsPolicies), usa el comando gcloud network-security server-tls-policies list:

    gcloud network-security server-tls-policies list \
      --location=REGION
    

    Reemplaza lo siguiente:

    REGION: usa global para el balanceador de cargas de aplicaciones interno entre regiones, el balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico. Para el balanceador de cargas de aplicaciones externo regional o el balanceador de cargas de aplicaciones interno regional, usa la región en la que configuraste el balanceador de cargas.

Configura la mTLS para el balanceador de cargas

Para que la autenticación de la TLS mutua funcione, después de configurar un balanceador de cargas, debes actualizar el proxy HTTPS de destino mediante el recurso ServerTLSPolicy.

  1. Asegúrate de haber creado el recurso de autenticación de cliente (ServerTLSPolicy). Para obtener instrucciones, consulta Crea los recursos de autenticación de clientes.

  2. Para obtener una lista de todos los proxies HTTPS de destino en tu proyecto, usa el comando gcloud compute target-https-proxies list:

    gcloud compute target-https-proxies list
    

    Toma nota del nombre del proxy HTTPS de destino para conectar el recurso ServerTLSPolicy. Este nombre se denomina TARGET_HTTPS_PROXY_NAME en los siguientes pasos.

  3. Para exportar la configuración de un proxy HTTPS de destino a un archivo, usa el comando gcloud compute target-https-proxies export.

    global

      gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
          --destination=TARGET_PROXY_FILENAME \
          --global
      

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml

    regional

     gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
         --destination=TARGET_PROXY_FILENAME \
         --region=REGION
     

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml
    • REGION: la región en la que configuraste el balanceador de cargas.
  4. Enumera todos los recursos ServerTlsPolicies en la ubicación especificada del proyecto actual.

    Console

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

      Ir a Autenticación de clientes

    2. Se muestran todos los recursos ServerTlsPolicies.

    gcloud

    Para enumerar todos los recursos de autenticación de clientes (ServerTlsPolicies), usa el comando gcloud network-security server-tls-policies list:

    gcloud network-security server-tls-policies list \
      --location=REGION
    

    Reemplaza lo siguiente:

    REGION: usa global para el balanceador de cargas de aplicaciones interno entre regiones, el balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico. Para el balanceador de cargas de aplicaciones externo regional o el balanceador de cargas de aplicaciones interno regional, usa la región en la que configuraste el balanceador de cargas.

    Ten en cuenta el nombre del recurso ServerTlsPolicies para configurar mTLS. Este nombre se denomina SERVER_TLS_POLICY_NAME en el paso siguiente.

  5. Para agregar el archivo de recursos TARGET_PROXY_FILENAME de ServerTlsPolicy, usa el siguiente comando. Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
  6. Para importar la configuración de un proxy HTTPS de destino desde un archivo, usa el comando gcloud compute target-https-proxies import.

    global

       gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
           --source=TARGET_PROXY_FILENAME \
           --global
       

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml

    regional

       gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
           --source=TARGET_PROXY_FILENAME \
           --region=REGION
       

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml
    • REGION: la región en la que configuraste el balanceador de cargas.

Agrega encabezados personalizados mTLS

Cuando habilitas mTLS, puedes pasar información sobre la conexión mTLS con encabezados personalizados. También puedes habilitar el registro para que se capturen los errores de conexión mTLS en los registros.

Agrega encabezados personalizados mTLS a los servicios de backend

Para los balanceadores de cargas de aplicaciones externos globales o los balanceadores de cargas de aplicaciones clásicos, puedes usar encabezados personalizados para pasar información sobre la conexión mTLS a los servicios de backend.

  1. Para enumerar todos los servicios de backend del proyecto, usa el comando gcloud compute backend-services list:

    gcloud compute backend-services list
    

    Toma nota del nombre del servicio de backend para habilitar los registros y los encabezados personalizados. Este nombre se denomina BACKEND_SERVICE en el siguiente paso.

  2. Para actualizar el servicio de backend, usa el comando gcloud compute backend-services update:

    gcloud compute backend-services update BACKEND_SERVICE \
      --global \
      --enable-logging \
      --logging-sample-rate=1 \
      --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \
      --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \
      --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \
      --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \
      --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \
      --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \
      --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \
      --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \
      --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \
      --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
    

Agrega encabezados personalizados mTLS al mapa de URL

Para los balanceadores de cargas de aplicaciones internos entre regiones, los balanceadores de cargas de aplicaciones externos regionales o los balanceadores de cargas de aplicaciones internos regionales, puedes usar encabezados personalizados para pasar información sobre la conexión mTLS al mapa de URL.

Para enumerar todos los mapas de URL en el proyecto, usa el comando gcloud compute url-maps list:

   gcloud compute url-maps list
   

Toma nota del nombre del mapa de URL para habilitar los encabezados y el registro personalizados. Este nombre se denomina URL_MAP_NAME en el siguiente paso.

global

Para editar el mapa de URL de un balanceador de cargas de aplicaciones interno entre regiones, usa el comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --global
   

A continuación, se muestra un archivo YAML de muestra que indica cómo usar variables en encabezados de solicitud personalizados (requestHeadersToAdd). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados (responseHeadersToAdd).

   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

regional

Para editar el mapa de URL de un balanceador de cargas de aplicaciones externo regional o un balanceador de cargas de aplicaciones interno regional, usa el comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

A continuación, se muestra un archivo YAML de muestra que indica cómo usar variables en encabezados de solicitud personalizados (requestHeadersToAdd). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados (responseHeadersToAdd).

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

Firma una clave de cliente con el certificado intermedio

En esta sección, se proporciona una opción de configuración adicional para generar un certificado de hoja. Si ya creaste un recurso TrustConfig con certificados intermedios (int.cert y int.key), sigue estas instrucciones:

  1. Crea un archivo de configuración de claves de cliente.

    cat > client.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          = clientAuth
    
    [dn_requirements]
    countryName               = US
    stateOrProvinceName       = California
    localityName              = San Francisco
    0.organizationName        = example
    organizationalUnitName    = test
    commonName                = test.example.com
    emailAddress              = test@example.com
    
    EOF
    

    Si deseas tener una identidad SPIFFE adjunta, haz lo siguiente:

    • Agrega un subjectAltName a tu sección [extension_requirements] de la siguiente manera:

      subjectAltName            = @sans_list
      
    • Agrega una sección nueva en la parte inferior del archivo client.config con lo siguiente:

      [sans_list]
      URI.1                     = spiffe://example.com/test-identity
      
  2. Firma la clave.

    openssl req -new -keyout client.key -out client.csr -config client.config
    
    openssl x509 -req -in client.csr -out client.cert -extfile client.config -extensions extension_requirements -days 365 -CA int.cert -CAkey int.key
    
  3. Para probar, envía una solicitud curl a la dirección IP del balanceador de cargas.

    curl -v -k --key client.key --cert client.cert https://IP_ADDRESS
    

    Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas.

¿Qué sigue?