Usa certificados SSL autoadministrados

Los certificados SSL autoadministrados son certificados que obtienes, aprovisionas y renuevas tú mismo. Además, puedes usar este recurso para proteger la comunicación entre los clientes y el balanceador de cargas.

Los certificados autoadministrados pueden ser cualquier combinación de los siguientes tipos de certificados:

  • Validación de dominio (DV)
  • Validación de organización (OV)
  • Validación extendida (EV)

En esta página se describe el proceso para obtener un certificado válido y, luego, subirlo a fin de crear un recurso de certificado SSL de Google Cloud.

Antes de comenzar

Permisos

Para realizar las tareas de esta guía, debes poder crear y modificar certificados SSL en tu proyecto. Cuentas con estos derechos si tienes una de las siguientes funciones o permisos:

Balanceadores de cargas

Se requiere un certificado SSL para ciertos tipos de balanceadores de cargas de Google Cloud, incluidos los siguientes:

Paso 1: Crea una clave privada y un certificado

Si ya tienes una clave privada y un certificado de una autoridad certificada (CA), omite esta sección y dirígete a Crea un recurso de certificado SSL.

Selecciona o crea una clave privada

Un certificado SSL de Google Cloud incluye una clave privada y el certificado en sí, ambos en formato PEM. Tu clave privada debe cumplir con los siguientes criterios:

  • Debe estar en formato PEM.
  • No se puede proteger con una frase de contraseña. Google Cloud almacena tu clave privada en su propio formato encriptado.
  • Su algoritmo de encriptación debe ser RSA-2048 o ECDSA P-256.

Puedes crear una clave privada nueva con encriptación RSA-2048 en formato PEM mediante el siguiente comando de OpenSSL.

openssl genrsa -out PRIVATE_KEY_FILE 2048

Reemplaza PRIVATE_KEY_FILE por la ruta y el nombre de archivo del archivo de claves privadas nuevo.

Crea una CSR

Después de obtener una clave privada, puedes generar una solicitud de firma de certificado (CSR) en formato PEM mediante OpenSSL. La CSR debe cumplir con los siguientes criterios:

  • Debe estar en formato PEM.
  • Debe tener un atributo de nombre común (CN) o uno de nombre alternativo de entidad (SAN). En términos prácticos, el certificado debe contener ambos atributos, CN y SAN, incluso si se trata de clientes de un solo dominio moderno, como las versiones actuales de iOS y macOS que no dependen solo del atributo CN.
  1. Crea un archivo de configuración de OpenSSL. En el siguiente ejemplo, los nombres alternativos de entidad se definen en [sans_list].

    cat <<'EOF' >CONFIG_FILE
    [req]
    default_bits              = 2048
    req_extensions            = extension_requirements
    distinguished_name        = dn_requirements
    
    [extension_requirements]
    basicConstraints          = CA:FALSE
    keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName            = @sans_list
    
    [dn_requirements]
    countryName               = Country Name (2 letter code)
    stateOrProvinceName       = State or Province Name (full name)
    localityName              = Locality Name (eg, city)
    0.organizationName        = Organization Name (eg, company)
    organizationalUnitName    = Organizational Unit Name (eg, section)
    commonName                = Common Name (e.g. server FQDN or YOUR name)
    emailAddress              = Email Address
    
    [sans_list]
    DNS.1                     = SUBJECT_ALTERNATIVE_NAME_1
    DNS.2                     = SUBJECT_ALTERNATIVE_NAME_2
    
    EOF
    
  2. Ejecuta el siguiente comando de OpenSSL para compilar un archivo de solicitud de firma de certificado (CSR). El comando es interactivo; se solicitarán atributos excepto para los nombres alternativos del sujeto, que se definieron en [sans_list] de CONFIG_FILE en el paso anterior.

    openssl req -new -key PRIVATE_KEY_FILE \
        -out CSR_FILE \
        -config CONFIG_FILE
    

En ambos pasos reemplaza los marcadores de posición por valores válidos:

  • CONFIG_FILE: es la ruta de acceso, incluido el nombre del archivo, del archivo de configuración de OpenSSL (puedes borrar el archivo después de completar este procedimiento).
  • SUBJECT_ALTERNATIVE_NAME_1 y SUBJECT_ALTERNATIVE_NAME_2: son nombres alternativos de entidad para tu certificado. Si el certificado es solo para un nombre de host, solo debes definir un nombre alternativo de entidad única que coincida con el nombre común. Si necesitas más de dos nombres alternativos de entidad, agrégalos al archivo de configuración y aumenta el número después de DNS (DNS.3, DNS.4, etcétera).
  • PRIVATE_KEY_FILE: es la ruta al archivo de claves privadas.
  • CSR_FILE: es la ruta, incluido el nombre del archivo, para la CSR.

Firma la CSR

Cuando una autoridad certificada (CA) firma tu CSR, usa su propia clave privada para crear un certificado.

Usa una CA de confianza pública

  • Si solicitas que una CA de confianza pública firme tu CSR, todos los clientes que confían en esa CA pública confían en el certificado resultante.
  • Para producir un certificado firmado, la CA pública solo necesita tu CSR.

Administra tu propia CA

  • Si administras tu propia CA, puedes usarla para firmar tu CSR. Si usas tu CA para firmar tu CSR, se crea un certificado de confianza interna cuando tus clientes también se configuraron para confiar en tu propia CA.

Usa un certificado autofirmado

  • Si usas la misma clave privada que usaste a fin de crear la CSR para firmarla, creas un certificado autofirmado. Los certificados autofirmados no son de confianza para ningún cliente, a menos que el cliente esté configurado con el fin de omitir la validación del certificado. Por ejemplo, un cliente de navegador web muestra un mensaje que te pregunta si deseas confiar en un certificado autofirmado. Solo debes usar certificados autofirmados para las pruebas.

Si administras tu propia CA o deseas crear un certificado autofirmado para pruebas, puedes usar el siguiente comando de OpenSSL:

openssl x509 -req \
    -signkey PRIVATE_KEY_FILE \
    -in CSR_FILE \
    -out CERTIFICATE_FILE \
    -days TERM

Reemplaza los marcadores de posición por valores válidos:

  • PRIVATE_KEY_FILE: es la ruta a la clave privada de tu CA. Si se crea un certificado autofirmado para pruebas, esta clave privada es la misma que se usó a fin de crear la CSR.
  • CSR_FILE: es la ruta a la CSR.
  • CERTIFICATE_FILE: es la ruta al archivo del certificado que se creará.
  • TERM: es la cantidad de días, a partir de ahora, durante los cuales los clientes que lo verifican deben considerarlo válido.

Comodines en nombres comunes

Los certificados SSL autoadministrados pueden usar un comodín en el nombre común. Por ejemplo, un certificado con el nombre común *.example.com. coincide con los nombres de host www.example.com y foo.example.com, pero no con a.b.example.com ni example.com. Cuando el balanceador de cargas selecciona un certificado, siempre prefiere hacer coincidir un nombre de host con certificados sin comodines, en vez de certificados con comodines.

Los certificados con fragmentos de comodines, como f*.example.com, no son compatibles.

Paso 2: Crea un recurso de certificado SSL autoadministrado

Antes de crear un recurso de certificado SSL de Google Cloud, debes tener una clave privada y un certificado. Consulta Crea una clave privada y un certificado si aún no los creaste ni obtuviste.

Console

Puedes trabajar con certificados SSL globales en la pestaña Certificados de la página Balanceo de cargas.

  1. Ve a la página Certificados en Google Cloud Console.
    Ir a la página Certificados
  2. Haz clic en Crear certificado SSL.
  3. Ingresa un nombre y una descripción opcional para el certificado.
  4. Selecciona Subir certificado.
  5. Pega el certificado o haz clic en Subir para navegar hasta el archivo del certificado.
    Puedes elegir incluir la cadena de certificados de CA en el mismo archivo que el certificado. Google Cloud no valida la cadena de certificados. La validación es tu responsabilidad.
  6. Pega la clave privada o haz clic en Subir para navegar hasta el archivo de claves privadas.
  7. Haz clic en Crear.

gcloud

Si deseas crear un certificado SSL global que se pueda usar para balanceadores de cargas de HTTP(S) externos o del proxy SSL, usa el comando gcloud compute ssl-certificates create con la marca --global:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --global

Si deseas crear un certificado SSL regional que se pueda usar para balanceadores de cargas de HTTP(S) internos, usa el comando gcloud compute ssl-certificates create con la marca --region:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --region=REGION

Reemplaza los marcadores de posición por valores válidos:

  • CERTIFICATE_NAME: es el nombre del recurso de certificado global que se creará.
  • CERTIFICATE_FILE: es la ruta a un archivo del certificado con formato PEM. Puedes elegir incluir la cadena de certificados de CA en el mismo archivo que el certificado. Google Cloud no valida la cadena de certificados. La validación es tu responsabilidad.
  • PRIVATE_KEY_FILE: es la ruta a una clave privada con formato PEM. No se puede proteger la clave privada con una frase de contraseña.
  • REGION: si corresponde, es la región del certificado SSL regional. Si este recurso de certificado es para un balanceador de cargas de HTTP(S) interno, la región debe ser la misma que la del balanceador de cargas de HTTP(S) interno.

api

Para los balanceadores de cargas del proxy SSL y HTTPS externos, usa el método sslCertificates.insert de la API.

Para los balanceadores de cargas de HTTPS internos, usa el método regionSslCertificates.insert de la API.

Antes de poder usar estos métodos, primero debes leer el certificado y los archivos de clave privada, ya que la solicitud a la API debe enviar el contenido de los archivos. Para ver muestras de código, consulta la página de referencia de la API.

Paso 3: Asocia un certificado SSL con un proxy de destino

Debes asociar al menos un certificado SSL con cada proxy HTTPS o SSL de destino. Puedes configurar el proxy de destino con la cantidad máxima de certificados SSL por proxy SSL o HTTPS de destino. Puedes hacer referencia a varios certificados autoadministrados en el mismo proxy de destino.

Console

Cuando usas Google Cloud Console para editar un balanceador de cargas existente, asocias de manera automática el certificado SSL con el proxy de destino adecuado.

gcloud

Si deseas asociar un certificado SSL global con un proxy HTTPS de destino para un balanceador de cargas de HTTP(S) externo, usa el comando gcloud compute target-https-proxies update con las marcas --global y --global-ssl-certificates:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --global \
    --ssl-certificates=CERTIFICATE_LIST \
    --global-ssl-certificates

A fin de asociar un certificado SSL global con un proxy SSL de destino para un balanceador de cargas de proxy SSL, usa el comando gcloud compute target-ssl-proxies update:

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates=CERTIFICATE_LIST

Si deseas asociar un certificado SSL regional con un proxy HTTPS de destino para un balanceador de cargas de HTTP(S) interno, usa el comando gcloud compute target-https-proxies update con las marcas --region y --ssl-certificates-region:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --region=REGION \
    --ssl-certificates=CERTIFICATE_LIST \
    --ssl-certificates-region=REGION

Reemplaza los marcadores de posición por valores válidos:

  • TARGET_PROXY_NAME: es el nombre del proxy de destino del balanceador de cargas.
  • CERTIFICATE_LIST: es una lista delimitada por comas de los nombres de certificados SSL de Google Cloud.
  • REGION: si corresponde, es la región para el proxy de destino regional y el certificado SSL regional.

Paso 4: Actualiza los registros AAAA y A del DNS para que apunten a la dirección IP del balanceador de cargas

En el host DNS, el ISP o el sitio de tu registrador (donde sea que se administren los registros DNS), agrega o actualiza los registros A (IPv4) y los registros AAAA (IPv6) del DNS de los dominios y de cualquier subdominio, a fin de que apunten a la dirección IP asociada con la regla o las reglas de reenvío del balanceador de cargas.

Si usas Cloud DNS y Google Domains, configura los dominios y actualiza los servidores de nombres.

Si usas varios dominios para un solo certificado, debes agregar o actualizar los registros DNS de todos los dominios y los subdominios a fin de que todos apunten a la dirección IP del balanceador de cargas.

Después de esperar a que se complete la propagación del DNS, puedes ejecutar el comando dig para verificar la configuración. Por ejemplo, supongamos que el dominio es www.example.com. Ejecuta el siguiente comando dig:

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com.        1742    IN  CNAME   www.example.com.edgekey.net.
www.example.com.edgekey.net. 21330 IN   CNAME   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net. 3356 IN CNAME   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net. 19  IN  A   203.0.113.5

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

En este ejemplo 203.0.113.5 es la dirección IP del balanceador de cargas.

Paso 5: Realiza pruebas con OpenSSL

Una vez que los estados del certificado y del dominio estén activos, el balanceador de cargas puede tardar hasta 30 minutos en comenzar a usar el certificado SSL autoadministrado.

Para probar ejecuta el siguiente comando de OpenSSL y reemplaza DOMAIN por el nombre del DNS y IP_ADDRESS por la dirección IP del balanceador de cargas.

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

Este comando da como resultado los certificados que el balanceador de cargas presenta al cliente. Junto con otra información detallada, el resultado debe incluir la cadena de certificados y Verify return code: 0 (ok).

Trabaja con certificados SSL autoadministrados

En las siguientes secciones, se describe cómo enumerar, ver, borrar y reemplazar recursos de certificados SSL.

Lista de certificados SSL

Console

Puedes verificar el estado de los certificados SSL globales en la pestaña Certificados de la página Balanceo de cargas.

  1. Ve a la página Certificados en Google Cloud Console.
    Ir a la página Certificados
  2. Filtra la lista de certificados SSL (opcional).

gcloud

Si deseas enumerar los certificados SSL globales que se pueden usar para balanceadores de cargas de HTTP(S) o SSL externos, usa el comando gcloud compute ssl-certificates list con la marca --global:

gcloud compute ssl-certificates list \
   --global

Para enumerar los certificados SSL regionales que se pueden usar en los balanceadores de cargas de HTTP(S) internos, usa el comando gcloud compute ssl-certificates list con el filtro region:

gcloud compute ssl-certificates list \
   --filter="region:(REGION ...)"

Reemplaza los marcadores de posición por valores válidos:

  • REGION: es una región de Google Cloud. Incluye varias regiones como una lista separada por espacios.

Describe los certificados SSL

Console

Puedes ver detalles adicionales sobre los certificados SSL globales en la pestaña Certificados de la página Balanceo de cargas.

  1. Ve a la página Certificados en Google Cloud Console.
    Ir a la página Certificados
  2. Filtra la lista de certificados SSL (opcional).
  3. Para ver más detalles, haz clic en el nombre del certificado.

gcloud

Si deseas describir un certificado SSL global (para balanceadores de cargas de HTTP(S) o del proxy SSL), usa el comando gcloud compute ssl-certificates describe con la marca --global:

gcloud  compute ssl-certificates describe CERTIFICATE_NAME \
   --global

Si deseas describir un certificado SSL regional (para balanceadores de cargas de HTTP(S) internos), usa el comando gcloud compute ssl-certificates describe con la marca --region:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --region=REGION

Reemplaza los marcadores de posición por valores válidos:

  • CERTIFICATE_NAME: es el nombre del certificado SSL.
  • REGION: es una región de Google Cloud.

Borra certificados SSL

Antes de borrar un certificado SSL, primero debes actualizar cada proxy de destino que haga referencia al certificado. En cada proxy de destino, ejecuta el comando gcloud update adecuado a fin de actualizar la CERTIFICATE_LIST del proxy de destino para que ya no incluya el certificado SSL que necesitas borrar. Ten en cuenta que cada proxy SSL o HTTPS de destino debe hacer referencia, por lo menos, a un certificado SSL.

Después de actualizar el proxy de destino, puedes borrar el certificado SSL.

Console

Puedes borrar certificados SSL globales en la pestaña Certificados de la página Balanceo de cargas.

  1. Ve a la página Certificados en Google Cloud Console.
    Ir a la página Certificados
  2. Selecciona el certificado SSL que deseas borrar.
  3. Haz clic en Borrar.
  4. Para confirmar la acción, vuelve a hacer clic en Borrar.

gcloud

A fin de borrar un certificado SSL global (para balanceadores de cargas de HTTP(S) o balanceadores de cargas de proxy SSL), usa el comando gcloud compute ssl-certificates delete con el comando --global:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

Si deseas borrar un certificado SSL regional (para balanceadores de cargas de HTTP(S) internos), usa el comando gcloud compute ssl-certificates delete con el comando --region:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --region=REGION

Reemplaza los marcadores de posición por valores válidos:

  • CERTIFICATE_NAME: es el nombre del certificado SSL.
  • REGION: es una región de Google Cloud.

Reemplaza certificados SSL

Sigue estos pasos si necesitas reemplazar o rotar un certificado SSL:

  1. Crea un recurso de certificado SSL nuevo. El certificado SSL nuevo debe tener un nombre único dentro del proyecto.
  2. Actualiza el proxy de destino con el fin de que su lista de certificados SSL incluya el certificado SSL nuevo en primera posición para convertirlo en el certificado principal. Después del certificado nuevo, incluye los certificados SSL existentes que quieras conservar. Asegúrate de excluir el certificado SSL anterior que ya no necesitas. Para evitar el tiempo de inactividad, ejecuta un solo comando de gcloud con la marca --ssl-certificates. Por ejemplo:

    Balanceadores de cargas de HTTP(S) externos:

    Usa el comando gcloud compute target-https-proxies update con la marca --global.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --global \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    Balanceadores de cargas de HTTP(S) internos:

    Usa el comando gcloud compute target-https-proxies update con la marca --region.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --region REGION \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    Balanceadores de cargas de proxy SSL:

    Usa el comando gcloud compute target-ssl-proxies update con la marca --backend-service.

    gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
       --ssl-certificates=new-ssl-cert,other-certificates
    
  3. Ejecuta el siguiente comando de OpenSSL para verificar que el balanceador de cargas entregue el certificado de reemplazo:

    echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
    
  4. Espera 15 minutos a fin de asegurarte de que el certificado de reemplazo esté disponible para todos los Google Front End (GFE).

  5. Borra el certificado SSL anterior (opcional).

Próximos pasos