Configurar SSL para instancias

En esta página se explica cómo configurar una instancia para utilizar SSL y cómo gestionar el servidor y los certificados de cliente.

Para obtener más información sobre el uso de SSL con MySQL, consulta la sección sobre cómo utilizar conexiones encriptadas en el manual de referencia de MySQL.

Introducción

Cloud SQL admite la conexión a una instancia mediante el protocolo de capa de conexión segura (SSL). Si no te conectas a las instancias mediante el proxy de Cloud SQL, deberías utilizar SSL para que los datos que envíes y recibas a través de Cloud SQL estén protegidos.

Cloud SQL utiliza un certificado con firma automática y un certificado (par de claves públicas/privadas) en el cliente (por ejemplo, una aplicación externa que acceda a la instancia de Cloud SQL). Estos certificados funcionan juntos para permitir que el servidor (instancia) y el cliente (aplicación) cifren su comunicación. Para este cifrado, es necesario que tengas un certificado de servidor válido y un certificado de cliente válido (par de claves).

Administrar los certificados del servidor

Cloud SQL crea un certificado de servidor de forma automática cuando se crea la instancia. Siempre y cuando este certificado sea válido, podrás olvidarte de administrarlo de forma activa. Sin embargo, el certificado tiene una fecha de vencimiento tras la cual dejará de tener validez y los clientes no podrán establecer conexiones seguras con la instancia.

Obtener información sobre el certificado del servidor

En la consola tienes a tu disposición la información sobre el certificado de tu servidor, como la fecha de vencimiento o el nivel de cifrado que proporciona.

Consola

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.

    Puedes ver la fecha de vencimiento del certificado del servidor en Configuración de SSL. Para ver el tipo de certificado, utiliza el SDK de Google Cloud.

gcloud

Puedes ver los detalles del certificado del servidor cuando describas la instancia:

gcloud sql instances describe [INSTANCE_NAME]

La información se muestra en serverCaCert.

cURL

Puedes ver los detalles del certificado del servidor cuando describas la instancia:

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     -X GET \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]?fields=serverCaCert

Actualizar el certificado del servidor

Cuando venza el certificado del servidor deberás crear uno nuevo. Se recomienda actualizar el certificado del servidor antes de su vencimiento para garantizar que los clientes pueden conectarse a la instancia con seguridad.

Consola (2.ª generación)

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia correspondiente.
  3. Selecciona la pestaña SSL.
  4. Haz clic en Restablecer configuración de SSL.
  5. Haz clic en Revocar certificados.
  6. Crea nuevos certificados de cliente.

Consola (1.ª generación)

Efectúa esta tarea para reiniciar la instancia de Cloud SQL.

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia correspondiente.
  3. Selecciona la pestaña SSL.
  4. Haz clic en Restablecer configuración de SSL.
  5. Haz clic en Revocar certificados y reiniciar.

    El reinicio de la instancia es necesario para completar la actualización.

  6. Crea nuevos certificados de cliente.

gcloud

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Actualiza el certificado:

    gcloud sql instances reset-ssl-config [INSTANCE_NAME]
    
  2. Para instancias de primera generación, reinicia la instancia para finalizar la actualización.

    gcloud sql instances restart [INSTANCE_NAME]
    
  3. Crea nuevos certificados de cliente.

cURL

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Actualiza el certificado:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/resetSslConfig
    
  2. Para las instancias de primera generación, reinicia la instancia:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    
  3. Crea nuevos certificados de cliente.

Administrar los certificados de cliente

Crear un nuevo certificado de cliente

Puedes crear hasta 10 certificados de cliente para cada instancia. Si pierdes la clave privada de un certificado, deberás crear uno nuevo, ya que no se pueden recuperar las claves privadas.

Consola (2.ª generación)

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.
  4. En la sección Conexiones SSL, haz clic en la opción para permitir solo conexiones SSL para que únicamente las conexiones SSL puedan conectarse a las instancias.

  5. En la sección Certificados de cliente, haz clic en Crear certificado de cliente.
  6. En el cuadro de diálogo de nuevo certificado de cliente, indica un nombre de certificado que sea único para esta instancia y haz clic en Añadir.
  7. En la primera sección del cuadro de diálogo Se ha creado un nuevo certificado SSL, haz clic en el enlace para descargar la clave privada en un archivo denominado client-key.pem.
  8. En la segunda sección, haz clic en el enlace para descargar el certificado de cliente en un archivo denominado client-cert.pem.
  9. En la tercera sección, haz clic en el enlace para descargar el certificado del servidor en un archivo denominado server-ca.pem.
  10. Haz clic en Cerrar.

Consola (1.ª generación)

Efectúa esta tarea para reiniciar la instancia de Cloud SQL.

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.
  4. En la sección Conexiones SSL, haz clic en la opción para permitir solo conexiones SSL para que únicamente las conexiones SSL puedan conectarse a las instancias y, a continuación, haz clic en Reiniciar ahora.

  5. En la sección Certificados de cliente, haz clic en Crear certificado de cliente.
  6. En el cuadro de diálogo de nuevo certificado de cliente, indica un nombre de certificado que sea único y haz clic en Añadir.
  7. En la primera sección del cuadro de diálogo Se ha creado un nuevo certificado SSL, haz clic en el enlace para descargar la clave privada en un archivo denominado client-key.pem.
  8. En la segunda sección, haz clic en el enlace para descargar el certificado de cliente en un archivo denominado client-cert.pem.
  9. En la tercera sección, haz clic en el enlace para descargar el certificado del servidor en un archivo denominado server-ca.pem.
  10. Haz clic en Cerrar y reiniciar para reiniciar la instancia de forma inmediata o haz clic en Cerrar para reiniciar manualmente la instancia en otro momento.

    Es necesario reiniciar la instancia para habilitar el certificado.

gcloud

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Configura la instancia para que requiera conexiones SSL:

    gcloud sql instances patch [INSTANCE_NAME] --require-ssl
    
  2. Crea un certificado SSL mediante el comando ssl-certs create:

    gcloud sql ssl-certs create [CERT_NAME] client-key.pem --instance [INSTANCE_NAME]
    
  3. Accede a la clave pública que acabas de crear con el comando ssl-certs describe:

    gcloud sql ssl-certs describe [CERT_NAME] --instance [INSTANCE_NAME] --format='value(cert)'
    
  4. Copia todo el certificado, desde la primera línea "-----BEGIN CERTIFICATE-----" hasta la última "-----END CERTIFICATE-----" en un archivo denominado client-cert.pem.
  5. Obtén el certificado del servidor mediante el comando instances describe:

    gcloud sql instances describe [INSTANCE_NAME]  --format='value(serverCaCert.cert)'
    
  6. Copia todo el certificado, desde la primera línea "-----BEGIN CERTIFICATE-----" hasta la última "-----END CERTIFICATE-----" en un archivo denominado server-ca.pem.
  7. Para instancias de primera generación, reinicia la instancia para habilitar el certificado y el cambio de la configuración de SSL.

    gcloud sql instances restart [INSTANCE_NAME]
    

cURL

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Configura la instancia para que requiera conexiones SSL:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"settings" : {"ipConfiguration" : {"requireSsl": true }}}' \
         -X PATCH \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]
    
  2. Crea un certificado SSL con un nombre único para esta instancia:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"commonName" : "[CERT_NAME]"}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts
    
  3. Copia todo el contenido del certificado entre comillas (pero no copies las propias comillas) de la respuesta en archivos locales del modo siguiente:
    1. Copia serverCaCert.cert en server-ca.pem.
    2. Copia clientCert.cert en client-cert.pem.
    3. Copia certPrivateKey en client-key.pem.
  4. Para las instancias de primera generación, reinicia la instancia:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    

Una vez que has llegado a este punto, cuentas con estos elementos:

  • Un certificado de servidor guardado como server-ca.pem.
  • Un certificado de clave pública de cliente guardado como client-cert.pem.
  • Una clave privada guardada como client-key.pem.

Según la herramienta que utilices para la conexión, estos tres elementos se especifican de distintas maneras. Por ejemplo, cuando utilizas el cliente MySQL, estos tres archivos son los valores de las opciones de comando --ssl-ca, --ssl-cert y --ssl-key, respectivamente. Si quieres ver un ejemplo de conexión mediante el cliente MySQL y SSL, consulta la sección sobre cómo conectar con mi cliente MySQL.

Acceder a un certificado de cliente

Puedes acceder a la parte de la clave pública de un certificado de cliente. En cambio, no puedes acceder a la clave privada. Si has perdido la clave privada, tendrás que crear un certificado nuevo.

Consola

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.
  4. En la sección Certificados de cliente, haz clic en el nombre de un certificado para verlo (client-cert.pem).

gcloud

  1. Accede al certificado de clave pública de cliente mediante el comando ssl-certs describe:

    gcloud sql ssl-certs describe [CERT_NAME] --instance [INSTANCE_NAME] --format='value(cert)'
    
  2. Copia todo el certificado, desde la primera línea "-----BEGIN CERTIFICATE-----" hasta la última "-----END CERTIFICATE-----" en un archivo, por ejemplo client-cert.pem.

cURL

  1. Obtén una lista de los certificados en la instancia para obtener la huella digital del certificado al que quieres acceder:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]sslCerts
    

    Registra el campo sha1Fingerprint del certificado al que quieres acceder. No incluyas las comillas.

  2. Accede al certificado:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts/[FINGERPRINT]
    
  3. Copia todos los datos del certificado entre comillas en un archivo, por ejemplo client-cert.pem. No copies las comillas.

Eliminar un certificado de cliente

Consola (2.ª generación)

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.
  4. En la sección Certificados de cliente, busca el certificado que quieres eliminar y haz clic en el icono de eliminación Sí..
  5. En el cuadro de diálogo Eliminar certificado de cliente, haz clic en Aceptar.

Consola (1.ª generación)

Efectúa esta tarea para reiniciar la instancia de Cloud SQL.

  1. Visita la página de instancias de Cloud SQL en la consola de Google Cloud Platform.

    Ir a la página de instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de detalles de instancia.
  3. Selecciona la pestaña SSL.
  4. En la sección Certificados de cliente, busca el certificado que quieres eliminar y haz clic en el icono de eliminación Sí..
  5. En el cuadro de diálogo Eliminar certificado de cliente, haz clic en Reiniciar ahora.

    Será necesario reiniciar la instancia para finalizar la operación.

gcloud

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Elimina el certificado SSL mediante el comando ssl-certs delete:

    gcloud sql ssl-certs delete [CERT_NAME] --instance [INSTANCE_NAME]
    
  2. Para las instancias de primera generación, reinicia la instancia:

    gcloud sql instances restart [INSTANCE_NAME]
    

cURL

Para las instancias de primera generación, es necesario reiniciar la instancia de Cloud SQL.

  1. Obtén una lista de los certificados en la instancia para ver la huella digital del certificado que quieres eliminar:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts
    

    Registra el campo sha1Fingerprint del certificado que quieres eliminar. No incluyas las comillas.

  2. Elimina el certificado:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X DELETE \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts/[FINGERPRINT]
    
  3. Para las instancias de primera generación, reinicia la instancia:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    

Siguientes pasos