Los certificados SSL autogestionados son certificados que obtienes, aprovisionas y renuevas tú mismo. Puedes usar este recurso para proteger la comunicación entre los clientes y tu balanceador de carga.
Los certificados autogestionados pueden ser cualquier combinación de los siguientes tipos de certificados:
- Validación de dominio (DV)
- Validación de la organización (OV)
- Validación ampliada (VA)
Los certificados autogestionados se pueden usar con los siguientes balanceadores de carga:
- Certificados globales
- Balanceador de carga de aplicación externo global
- Balanceador de carga de aplicación clásico
- Balanceador de carga de red del proxy externo (con un proxy SSL de destino)
- Certificados regionales
- Balanceador de carga de aplicación externo regional
- Balanceador de carga de aplicación interno regional
En esta página se describe el proceso para obtener un certificado de Compute Engine válido y, a continuación, subirlo para crear un recurso de certificado SSL. Google Cloud
Para crear certificados gestionados por Google con Certificate Manager, consulta el artículo Descripción general de la implementación.
Antes de empezar
- Familiarícese con la información general sobre los certificados SSL.
- Asegúrate de que tienes los nombres de dominio que quieres usar para tu certificado SSL autogestionado. Si usas Cloud Domains, consulta el paso 1: Registra un nombre de dominio con Cloud Domains.
Permisos
Para realizar las tareas de esta guía, debes poder crear y modificar certificados SSL en tu proyecto. Puedes hacerlo si se cumple una de las siguientes condiciones:
- Eres propietario o editor (
roles/owner
oroles/editor
) del proyecto. - Tienes los roles Administrador de seguridad de Compute
(
compute.securityAdmin
) y Administrador de red de Compute (compute.networkAdmin
) en el proyecto. - Tienes un rol personalizado para el proyecto que incluye los permisos
compute.sslCertificates.*
y uno o ambos decompute.targetHttpsProxies.*
ycompute.targetSslProxies.*
, en función del tipo de balanceador de carga que utilices.
Paso 1: Crea una clave privada y un certificado
Si ya tienes una clave privada y un certificado de una autoridad de certificación (CA), salta esta sección y ve a Crear un recurso de certificado SSL.
Selecciona o crea una clave privada
Un certificado SSL incluye una clave privada y el propio certificado, ambos en formato PEM. Google Cloud Tu clave privada debe cumplir los siguientes criterios:
- Debe estar en formato PEM.
- No se puede proteger con una contraseña. Google Cloud almacena tu clave privada en su propio formato cifrado.
- Su algoritmo de cifrado debe ser RSA o ECDSA. Para saber qué tipos de claves puedes usar, consulta Tipos de claves admitidos.
Para crear una clave privada, usa uno de los siguientes comandos de OpenSSL.
Crea una clave privada RSA de 2048 bits:
openssl genrsa -out PRIVATE_KEY_FILE 2048
Crea una clave privada ECDSA P-256:
openssl ecparam -name prime256v1 -genkey -noout -out PRIVATE_KEY_FILE
Sustituye PRIVATE_KEY_FILE por la ruta y el nombre de archivo de la nueva clave privada.
Crear una solicitud de firma de certificado (CSR)
Una vez que tengas una clave privada, puedes generar una solicitud de firma de certificado (CSR) en formato PEM con OpenSSL. Tu CSR debe cumplir los siguientes requisitos:
- Debe estar en formato PEM.
- Debe tener un nombre común (
CN
) o un atributo de nombre alternativo del sujeto (SAN
). En la práctica, tu certificado debe contener ambos atributos,CN
ySAN
, aunque sea para un solo dominio. Los clientes modernos, como las versiones actuales de macOS y iOS, no se basan solo en el atributoCN
.
Para crear una CSR, sigue estos pasos:
Crea un archivo de configuración de OpenSSL. En el ejemplo siguiente, los nombres alternativos de la entidad se definen en
[sans_list]
.cat <<'EOF' >CONFIG_FILE [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [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
Ejecuta el siguiente comando de OpenSSL para crear un archivo de solicitud de firma de certificado (CSR). El comando es interactivo. Se te pedirá que introduzcas los atributos excepto los nombres alternativos de la entidad, que definiste en la
[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, sustituye lo siguiente:
- CONFIG_FILE: la ruta, incluido el nombre de archivo, del archivo de configuración de OpenSSL (puedes eliminar el archivo después de completar este procedimiento).
SUBJECT_ALTERNATIVE_NAME_1 y SUBJECT_ALTERNATIVE_NAME_2: nombres alternativos de la entidad receptora del certificado
Si tu certificado es solo para un nombre de host, solo debes definir un nombre alternativo del sujeto que coincida con el nombre común. Si necesitas más de dos nombres alternativos de asunto, añádelos al archivo de configuración e incrementa el número después de
DNS
(DNS.3
,DNS.4
, etc.).PRIVATE_KEY_FILE: la ruta al archivo de clave privada
CSR_FILE: la ruta, incluido el nombre de archivo, de la CSR
Firmar la CSR
Cuando una autoridad de certificación (CA) firma tu CSR, utiliza su propia clave privada para crear un certificado. Utiliza uno de los siguientes métodos para firmar la CSR:
Usar una AC de confianza pública
Si solicitas a una AC pública de confianza que firme tu CSR, todos los clientes que confíen en esa AC pública confiarán en el certificado resultante. Para generar un certificado firmado, la AC pública solo necesita tu CSR.
Usar tu propia CA interna
Si gestionas tu propia CA, puedes usarla para firmar tu CSR. Si usas tu AC para firmar tu CSR, se crea un certificado de confianza interna cuando tus clientes también se han configurado para confiar en tu propia AC.
Utilizar un certificado autofirmado
Si usas la misma clave privada que usaste para crear la CSR para firmar la CSR, habrás creado un certificado autofirmado. Solo debes usar certificados autofirmados para hacer pruebas.
Google Cloud no admite la verificación del lado del cliente para certificados de servidor autofirmados. Por lo tanto, debes configurar el cliente para que omita la validación de certificados. Por ejemplo, puedes crear un cliente de navegador web que muestre un mensaje en el que se te pregunte si quieres confiar en un certificado autofirmado.
Si gestionas tu propia AC o quieres crear un certificado autofirmado para hacer pruebas, puedes usar el siguiente comando de OpenSSL:
openssl x509 -req \ -signkey PRIVATE_KEY_FILE \ -in CSR_FILE \ -out CERTIFICATE_FILE \ -extfile CONFIG_FILE \ -extensions extension_requirements \ -days TERM
Haz los cambios siguientes:
- PRIVATE_KEY_FILE: la ruta a la clave privada de tu CA. Si vas a crear un certificado autofirmado para hacer pruebas, esta clave privada es la misma que la que se usa para crear la CSR.
- CSR_FILE: la ruta a la CSR
- CERTIFICATE_FILE: la ruta al archivo de certificado que se va a crear
- TERM: el número de días, a partir de ahora, durante los cuales los clientes que lo verifiquen deben considerar que el certificado es válido
Comodines en nombres comunes
Tus certificados SSL autogestionados 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 con example.com
. Cuando el balanceador de carga selecciona un certificado, siempre prefiere que un nombre de host coincida con certificados sin comodines en lugar de con certificados con comodines.
No se admiten certificados con fragmentos comodín, como f*.example.com
.
Paso 2: Crea un recurso de certificado SSL autogestionado
Antes de crear un recurso de certificado SSL, debes tener una clave privada y un certificado. Google Cloud Consulta el artículo sobre cómo crear una clave privada y un certificado si aún no los has creado u obtenido.
Después de crear un certificado, no puedes cambiar su ámbito de global a regional ni de regional a global.
Consola
Puedes crear certificados SSL globales en la pestaña Certificados clásicos de la consola de Google Cloud .
Los certificados SSL regionales no se pueden crear desde la pestaña Certificados clásicos de la consola de Google Cloud . Usa gcloud
o la API REST.
También se pueden crear certificados SSL regionales como parte del flujo de trabajo de creación de balanceadores de carga de aplicaciones regionales mediante la Google Cloud consola.
- Ve a la pestaña Certificado clásico de la Google Cloud consola.
Ir a Certificados clásicos - Haz clic en Crear certificado SSL.
- Introduce un nombre y, si quieres, una descripción del certificado.
- Selecciona Subir mi certificado.
- Pega el certificado o haz clic en Subir para ir al archivo del certificado.
Puedes incluir la cadena de certificados de la AC en el mismo archivo que el certificado. Google Cloud no valida la cadena de certificados por ti, sino que es tu responsabilidad. - Pega tu clave privada o haz clic en Subir para ir al archivo de tu clave privada.
- Haz clic en Crear.
gcloud
Para crear un certificado SSL global, 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
Para crear un certificado SSL regional, 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
Haz los cambios siguientes:
- CERTIFICATE_NAME: el nombre del recurso de certificado que se va a crear.
CERTIFICATE_FILE: la ruta a un archivo de certificado con formato PEM
Puedes incluir la cadena de certificados de la CA en el mismo archivo que el certificado. Google Cloud no valida la cadena de certificados por ti, sino que es tu responsabilidad.
PRIVATE_KEY_FILE: la ruta a una clave privada con formato PEM. La clave privada no puede estar protegida por una contraseña.
REGION: si procede, la región del certificado SSL regional
Si este recurso de certificado es para un balanceador de carga de aplicaciones interno o un balanceador de carga de aplicaciones externo regional, la región debe ser la misma que la del balanceador de carga.
Java
Para usar los métodos de la API, primero debes leer los archivos de certificado y clave privada, y, a continuación, crear el certificado SSL. Esto se debe a que la solicitud de la API debe incluir el contenido de los archivos.
En el siguiente ejemplo se muestra cómo hacerlo con Java.
Para los certificados SSL globales, usa el método de la API sslCertificates.insert:
Para los certificados SSL regionales, usa el método de la API regionSslCertificates.insert:
Para ver más ejemplos de código, consulta la página de referencia de la API.
Python
Para usar los métodos de la API, primero debes leer los archivos de certificado y clave privada, y, a continuación, crear el certificado SSL. Esto se debe a que la solicitud de la API debe incluir el contenido de los archivos.
En los siguientes ejemplos se muestra cómo hacerlo con Python.
Para los certificados SSL globales, usa el método de la API sslCertificates.insert:
Para los certificados SSL regionales, usa el método de la API regionSslCertificates.insert:
Para ver más ejemplos de código, consulta la página de referencia de la API.
Paso 3: Asociar un certificado SSL a un proxy de destino
Debes asociar al menos un certificado SSL a cada proxy HTTPS o SSL de destino. Puedes configurar el proxy de destino con un máximo de certificados SSL por proxy HTTPS o SSL de destino. Puede hacer referencia a varios certificados autogestionados en el mismo proxy de destino.
Consola
Cuando usas la consola de Google Cloud para editar un balanceador de carga, el certificado SSL se asocia automáticamente al proxy de destino adecuado. Google Cloud
gcloud
Para asociar un certificado SSL global a un proxy HTTPS de destino, 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=SSL_CERTIFICATE_LIST \ --global-ssl-certificates
Para asociar un certificado SSL global a un proxy SSL de destino, usa el comando gcloud compute target-ssl-proxies
update
:
gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_LIST
Para asociar un certificado SSL regional con un proxy HTTPS de destino, 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=SSL_CERTIFICATE_LIST \ --ssl-certificates-region=REGION
Haz los cambios siguientes:
TARGET_PROXY_NAME
: el nombre del proxy de destino del balanceador de cargaREGION
(si procede): la región del proxy de destino regional y del certificado SSL regional. Las regiones deben coincidir.SSL_CERTIFICATE_LIST
: lista de nombres de certificados SSL separados por comasGoogle CloudAsegúrate de que la lista de certificados a los que se hace referencia incluya todos los certificados SSL antiguos válidos, así como el nuevo certificado SSL. El comando
gcloud compute target-ssl-proxies update
sustituye los valores originales de--ssl-certificates
por el nuevo valor.
API
Para asociar un certificado SSL global a un proxy HTTPS de destino, envía una solicitud POST
al método targetHttpsProxies.insert
y sustituye PROJECT_ID
por el ID de tu proyecto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-xlb-map", "sslCertificates": /projectsPROJECT_IDglobal/sslCertificates/SSL_CERT_NAME }
Para asociar un certificado SSL global a un proxy HTTPS de destino, envía una solicitud POST
al método targetSslProxies.insert
y sustituye PROJECT_ID
por el ID de tu proyecto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetSslProxy { "name": "l7-ssl-proxy", "sslCertificates": /projectsPROJECT_IDglobal/sslCertificates/SSL_CERT_NAME }
Para asociar un certificado SSL regional a un proxy HTTPS de destino, envía una solicitud POST
al método
targetHttpsProxies.insert
y sustituye PROJECT_ID
por el ID de tu proyecto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map", "region": "us-west1" "sslCertificates": /projectsPROJECT_IDregions/us-west1/sslCertificates/SSL_CERT_NAME }
Paso 4: Actualiza los registros A y AAAA de DNS para que apunten a la dirección IP del balanceador de carga
En el sitio de tu registrador, host de DNS o proveedor de Internet (donde se gestionen tus registros DNS), añade o actualiza los registros A de DNS (para IPv4) y los registros AAAA de DNS (para IPv6) de tus dominios y subdominios para que dirijan a la dirección IP asociada a las reglas de reenvío del balanceador de carga.
Si usas Cloud DNS y Cloud Domains, configura tus dominios y actualiza tus servidores de nombres.
Si usas varios dominios para un solo certificado, debes añadir o actualizar los registros DNS de todos los dominios y subdominios para que apunten a la dirección IP de tu balanceador de carga.
Después de esperar a que se complete la propagación del DNS, puedes verificar la configuración ejecutando el comando dig
. Por ejemplo, supongamos que tu 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 de tu balanceador de carga.
Paso 5: Prueba con OpenSSL
El balanceador de carga puede tardar hasta 30 minutos en empezar a usar tu certificado SSL autogestionado.
Para probarlo, ejecuta el siguiente comando de OpenSSL, sustituyendo DOMAIN por tu nombre de DNS y IP_ADDRESS por la dirección IP de tu balanceador de carga.
echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error
Este comando muestra los certificados que el balanceador de carga presenta al cliente. Además de otra información detallada, el resultado debe incluir la cadena de certificados y Verify return code: 0 (ok)
.
Trabajar con certificados SSL autogestionados
En las siguientes secciones se describe cómo enumerar, ver, eliminar y sustituir recursos de certificado SSL.
Mostrar lista de certificados SSL
Consola
Puedes consultar el estado de tus certificados SSL globales en la pestaña Certificados clásicos de la página Gestor de certificados.
Los certificados SSL regionales no se pueden mantener en la consola de Google Cloud .
Usa gcloud
o la API REST.
- Ve a la pestaña Certificados clásicos de la Google Cloud consola.
Ir a Certificados clásicos - (Opcional) Filtra la lista de certificados SSL.
gcloud
Para ver una lista de los certificados SSL globales, usa el comando gcloud compute ssl-certificates
list
con la marca --global
:
gcloud compute ssl-certificates list \ --global
Para enumerar los certificados SSL regionales, usa el comando gcloud compute ssl-certificates
list
con el filtro region
:
gcloud compute ssl-certificates list \ --filter="region:(REGION ...)"
Haz los cambios siguientes:
- REGION: una región. Incluye varias regiones como una lista separada por espacios. Google Cloud
Describe los certificados SSL
Consola
Puedes ver más detalles sobre tus certificados SSL globales en la pestaña Certificados clásicos de la página Gestor de certificados.
- Ve a la página Certificados clásicos de la Google Cloud consola.
Ir a Certificados clásicos - (Opcional) Filtra la lista de certificados SSL.
- Para ver más detalles, haz clic en el nombre del certificado.
gcloud
Para describir un certificado SSL global,
usa el comando gcloud compute ssl-certificates
describe
con la marca --global
:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global
Para describir un certificado SSL regional, usa el comando gcloud compute ssl-certificates
describe
con la marca --region
:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --region=REGION
Haz los cambios siguientes:
- CERTIFICATE_NAME: el nombre del certificado SSL
- REGION: a Google Cloud region
Eliminar los certificados SSL
Antes de eliminar un certificado SSL, debes actualizar cada proxy de destino que haga referencia al certificado. En cada proxy de destino, ejecute el comando gcloud update
adecuado para actualizar el SSL_CERTIFICATE_LIST del proxy de destino de forma que ya no incluya el certificado SSL que quiere eliminar. Cada proxy SSL o HTTPS de destino debe hacer referencia a al menos un certificado SSL.
Una vez que hayas actualizado el proxy de destino, podrás eliminar el certificado SSL.
Consola
Puede eliminar certificados SSL globales en la pestaña Certificados clásicos de la página Gestor de certificados.
- Ve a la pestaña Certificados clásicos de la Google Cloud consola.
Ir a Certificados clásicos - Seleccione el certificado SSL que quiera eliminar.
- Haz clic en Eliminar.
- Para confirmar la acción, haz clic de nuevo en Eliminar.
gcloud
Para eliminar un certificado SSL global, usa el comando gcloud compute ssl-certificates
delete
con el comando --global
:
gcloud compute ssl-certificates delete CERTIFICATE_NAME \ --global
Para eliminar un certificado SSL regional, usa el comando gcloud compute ssl-certificates
delete
con el comando --region
:
gcloud compute ssl-certificates delete CERTIFICATE_NAME \ --region=REGION
Haz los cambios siguientes:
- CERTIFICATE_NAME: el nombre del certificado SSL
- REGION: a Google Cloud region
Sustituir o renovar un certificado SSL antes de que caduque
Siga estos pasos si necesita sustituir, renovar o rotar un certificado SSL:
Ejecuta el comando
gcloud compute ssl-certificates describe
del certificado actual para comprobar si está a punto de caducar.Crea un recurso de certificado SSL. El nuevo certificado SSL debe tener un nombre único en el proyecto.
Actualiza el proxy de destino para separar el certificado SSL antiguo y añadir el nuevo. Incluye todos los demás certificados SSL que quieras conservar.
Para evitar el tiempo de inactividad, ejecuta un solo comando
gcloud
con la marca--ssl-certificates
. Por ejemplo:En el caso de los balanceadores de carga de aplicación externos globales:
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
En el caso de los balanceadores de carga de aplicación externos regionales y los balanceadores de carga de aplicación internos regionales:
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 \ --ssl-certificates-region=REGION
En el caso de los balanceadores de carga de red de proxy externos:
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
Para comprobar que el balanceador de carga está usando el certificado de sustitución, ejecuta el siguiente comando de OpenSSL:
echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
Espera 15 minutos para asegurarte de que la operación de sustitución se ha propagado a todos los front-ends de Google (GFEs).
Opcional: elimina el certificado SSL antiguo.
Rotar los certificados SSL periódicamente
Esta solución de ejemplo comprueba periódicamente el estado de los certificados utilizados con balanceadores de carga de Google Cloud y rota los certificados cuando alcanzan un porcentaje determinado de su tiempo de vida. La herramienta usa las ACs configuradas mediante el Servicio de Autoridades de Certificación.
Esta solución funciona con los siguientes balanceadores de carga:
- Balanceador de carga de aplicación externo global
- Balanceador de carga de aplicación clásico
- Balanceador de carga de aplicación externo regional
- Balanceador de carga de aplicación interno
- Balanceador de carga de red de proxy externo con un proxy SSL
Siguientes pasos
- Para solucionar problemas con los certificados SSL, consulta el artículo Solucionar problemas de certificados SSL.