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.
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
)
Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.
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.
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
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
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
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
:
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
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
Para crear los recursos
TrustConfig
de Certificate Manager, usa el comandogcloud 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 seguridad de red
Una política de TLS del servidor (recurso de seguridad de red ServerTLSPolicy
) te permite especificar el modo de la TLS del servidor y el recurso TrustConfig
para usar cuando se validan 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.
- Cuando
clientValidationMode
se establece comoALLOW_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 enREJECT_INVALID
, solo las solicitudes que proporcionan un certificado de cliente que se puede validar en un recursoTrustConfig
se pasan al backend.
Para crear el recurso ServerTLSPolicy
, completa los siguientes pasos:
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 reemplazaPROJECT_ID
por el ID de tu proyecto de Google Cloud.Opción 1:
clientValidationMode
se establece enALLOW_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 enREJECT_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
Para crear el recurso
ServerTlsPolicy
, usa el comandogcloud 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
Para obtener más información, consulta los modos de validación del cliente de mTLS.
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:
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
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
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?
- Configura TLS mutua para un balanceador de cargas externo de aplicaciones global
- Configura TLS mutua para un balanceador de cargas clásico de aplicaciones
- Configura TLS mutua para un balanceador de cargas de aplicaciones interno
- Configura TLS mutua para un balanceador de cargas de aplicaciones externo regional
- Configura la TLS mutua con una CA privada