Utiliser des certificats SSL autogérés

Les certificats SSL autogérés sont des certificats que vous obtenez, provisionnez et renouvelez vous-même. Vous pouvez utiliser cette ressource pour sécuriser la communication entre les clients et votre équilibreur de charge.

Les certificats autogérés peuvent avoir la forme d'une combinaison quelconque des types de certificat suivants :

  • Validation de domaine (DV)
  • Validation organisationnelle (OV)
  • Validation étendue (EV)

Les certificats autogérés sont compatibles avec les équilibreurs de charge suivants :

  • Certificats globaux
    • Équilibreur de charge d'application externe global
    • Équilibreur de charge d'application classique
    • Équilibreur de charge réseau proxy externe (avec proxy SSL cible)
  • Certificats régionaux
    • Équilibreur de charge d'application externe régional
    • Équilibreur de charge d'application interne

Cette page décrit le processus d'obtention d'un certificat Compute Engine valide, ainsi que l'importation de votre certificat pour créer une ressource de certificat SSL Google Cloud.

Pour créer des certificats gérés par Google à l'aide du gestionnaire de certificats, consultez la section Présentation du déploiement.

Avant de commencer

Autorisations

Pour effectuer les tâches de ce guide, vous devez être en mesure de créer et de modifier des certificats SSL dans votre projet. Pour ce faire, vous devez remplir l'une des conditions suivantes :

Étape 1 : Créer une clé privée et un certificat

Si vous disposez déjà d'une clé privée et d'un certificat d'une autorité de certification (CA), ignorez cette section et accédez à Créer une ressource de certificat SSL.

Sélectionner ou créer une clé privée

Un certificat SSL Google Cloud inclut à la fois une clé privée et le certificat lui-même, tous deux au format PEM. Votre clé privée doit répondre aux critères suivants :

  • Elle doit être au format PEM.
  • Elle ne peut pas être protégée par une phrase secrète. Google Cloud stocke votre clé privée dans son propre format chiffré.
  • Son algorithme de chiffrement doit être RSA-2048 ou ECDSA P-256.

Pour créer une clé privée, utilisez l'une des commandes OpenSSL suivantes.

  • Créez une clé privée RSA-2048 :

    openssl genrsa -out PRIVATE_KEY_FILE 2048
    
  • Créez une clé privée ECDSA P-256 :

    openssl ecparam -name prime256v1 -genkey -noout -out PRIVATE_KEY_FILE
    

Remplacez PRIVATE_KEY_FILE par le chemin d'accès et le nom du nouveau fichier de clé privée.

Créer une requête de signature de certificat (CSR)

Une fois que vous disposez d'une clé privée, vous pouvez générer une requête de signature de certificat (CSR) au format PEM à l'aide d'OpenSSL. Elle doit respecter les critères suivants :

  • Elle doit être au format PEM.
  • Elle doit avoir un nom courant (CN) ou un autre nom d'objet (SAN). En pratique, votre certificat doit contenir les deux attributs CN et SAN, même s'il ne concerne qu'un seul domaine. Les clients modernes tels que les versions actuelles de macOS et iOS ne s'appuient pas uniquement sur l'attribut CN.

Pour créer un CSR, procédez comme suit :

  1. Créez un fichier de configuration OpenSSL. Dans l'exemple suivant, les autres noms d'objet sont définis dans [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
    
  2. Exécutez la commande OpenSSL suivante pour créer un fichier de requête de signature de certificat (CSR). La commande est interactive. Vous êtes invité à saisir des attributs sauf pour les autres noms d'objet, que vous avez définis dans le paramètre [sans_list] du fichier CONFIG_FILE à l'étape précédente.

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

Pour chacune de ces deux étapes, remplacez les éléments suivants :

  • CONFIG_FILE : chemin d'accès (nom de fichier inclus) au fichier de configuration OpenSSL (vous pouvez supprimer le fichier une fois cette procédure terminée)
  • SUBJECT_ALTERNATIVE_NAME_1 et SUBJECT_ALTERNATIVE_NAME_2 : autres noms d'objet de votre certificat

    Si votre certificat ne concerne qu'un seul nom d'hôte, vous ne devez définir qu'un seul autre nom d'objet correspondant au nom courant. Si vous avez besoin de plus de deux autres noms d'objet, ajoutez-les au fichier de configuration, en incrémentant le nombre après DNS (DNS.3, DNS.4, etc.).

  • PRIVATE_KEY_FILE : chemin d'accès au fichier de clé privée

  • CSR_FILE : chemin d'accès (nom de fichier inclus) à la requête de signature de certificat

Signer la requête de signature de certificat

Lorsqu'une autorité de certification (CA) signe votre requête de signature de certificat, elle utilise sa propre clé privée pour créer un certificat. Utilisez l'une des méthodes suivantes pour signer la requête de signature de certificat :

Utiliser une autorité de certification (CA) publiquement approuvée

Si vous demandez à une autorité de certification publique de signer votre requête de signature de certificat, le certificat obtenu est approuvé par tous les clients qui font confiance à cette autorité de certification publique. Pour produire un certificat signé, l'autorité de certification publique n'a besoin que de votre requête de signature de certificat.

Utiliser votre propre autorité de certification interne

Si vous gérez votre propre autorité de certification, vous pouvez l'utiliser pour signer votre requête de signature de certificat. L'utilisation de votre autorité de certification pour signer votre requête de signature de certificat entraîne la création d'un certificat de confiance interne lorsque vos clients ont également été configurés pour approuver votre propre autorité de certification.

Utiliser un certificat autosigné

Si vous utilisez la même clé privée que celle que vous avez utilisée pour créer la requête de signature de certificat, vous avez créé un certificat autosigné. Vous ne devez utiliser que des certificats autosignés pour les tests.

Google Cloud n'est pas compatible avec la validation côté client pour les certificats de serveur autosignés. Par conséquent, vous devez configurer le client pour qu'il ignore la validation du certificat. Par exemple, vous pouvez créer un client de navigateur Web qui affiche un message vous demandant si vous souhaitez approuver un certificat autosigné.

Si vous gérez votre propre autorité de certification ou si vous souhaitez créer un certificat autosigné pour effectuer un test, vous pouvez utiliser la commande OpenSSL suivante :

openssl x509 -req \
    -signkey PRIVATE_KEY_FILE \
    -in CSR_FILE \
    -out CERTIFICATE_FILE \
    -extfile CONFIG_FILE \
    -extensions extension_requirements \
    -days TERM

Remplacez les éléments suivants :

  • PRIVATE_KEY_FILE : chemin d'accès à la clé privée de votre autorité de certification. Si vous créez un certificat autosigné pour effectuer un test, cette clé privée est identique à celle utilisée pour créer la requête de signature de certificat.
  • CSR_FILE : chemin d'accès à la requête de signature de certificat.
  • CERTIFICATE_FILE : chemin d'accès au fichier de certificat à créer.
  • TERM : nombre de jours pendant lesquels le certificat doit être considéré comme recevable par les clients qui le valident.

Caractères génériques dans les noms communs

Il est possible d'utiliser un caractère générique dans le nom commun des certificats SSL autogérés. Par exemple, un certificat avec un nom commun *.example.com. correspond aux noms d'hôte www.example.com et foo.example.com, mais pas a.b.example.com ou example.com. Lorsque l'équilibreur de charge sélectionne un certificat, il privilégie toujours l'association d'un nom d'hôte à des certificats sans caractères génériques qu'à des certificats comportant des caractères génériques.

Les certificats contenant des fragments de caractères génériques, tels que f*.example.com, ne sont pas acceptés.

Étape 2 : Créer une ressource de certificat SSL autogéré

Avant de pouvoir créer une ressource de certificat SSL Google Cloud, vous devez disposer d'une clé privée et d'un certificat. Reportez-vous à l'étape Créer une clé privée et un certificat si vous ne les avez pas encore créés ou obtenus.

Une fois que vous avez créé un certificat, vous ne pouvez pas modifier son champ d'application (de global à régional, ou de régional à global).

Console

Vous pouvez utiliser des certificats SSL globaux dans l'onglet Certificats classiques de la console Google Cloud. Les certificats SSL régionaux ne peuvent pas être créés dans la console Google Cloud. Utilisez gcloud ou l'API REST.

  1. Accédez à l'onglet Certificats classiques dans la console Google Cloud.
    Accéder à l'onglet "Certificats classiques"
  2. Cliquez sur Créer un certificat SSL.
  3. Saisissez un nom et une description facultative pour le certificat.
  4. Sélectionnez Importer mon certificat.
  5. Collez votre certificat ou cliquez sur Importer pour accéder au fichier de votre certificat.
    Vous pouvez choisir d'inclure la chaîne de certificats CA dans le même fichier que le certificat. Google Cloud ne valide pas la chaîne de certificats pour vous. La validation relève de votre responsabilité.
  6. Collez votre clé privée ou cliquez sur Importer pour accéder au fichier de votre clé privée.
  7. Cliquez sur Créer.

gcloud

Pour créer un certificat SSL global, exécutez la commande gcloud compute ssl-certificates create avec l'option --global :

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

Pour créer un certificat SSL régional, exécutez la commande gcloud compute ssl-certificates create avec l'option --region :

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME : nom de la ressource de certificat globale à créer.
  • CERTIFICATE_FILE : chemin d'accès à un fichier de certificat au format PEM.

    Vous pouvez choisir d'inclure la chaîne de certificats CA dans le même fichier que le certificat. Google Cloud ne valide pas la chaîne de certificats pour vous. La validation relève de votre responsabilité.

  • PRIVATE_KEY_FILE : chemin d'accès à une clé privée au format PEM. La clé privée ne peut pas être protégée par une phrase secrète.

  • REGION : le cas échéant, région du certificat SSL régional.

    Si cette ressource de certificat est destinée à un équilibreur de charge d'application interne ou externe régional, la région doit être identique à celle de l'équilibreur de charge.

API

Pour utiliser les méthodes d'API, vous devez d'abord lire les fichiers de certificat et de clé privée, car la requête API doit envoyer le contenu de ces fichiers.

Lisez les fichiers de certificat et de clé privée, puis créez le certificat SSL. Les exemples suivants montrent comment effectuer cette opération avec Python.

Pour les certificats SSL globaux, utilisez la méthode API sslCertificates.insert :

from pathlib import Path
from pprint import pprint
from typing import Union

from googleapiclient import discovery


def create_certificate(
    project_id: str,
    certificate_file: Union[str, Path],
    private_key_file: Union[str, Path],
    certificate_name: str,
    description: str = "Certificate created from a code sample.",
) -> dict:
    """
    Create a global SSL self-signed certificate within your Google Cloud project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        certificate_file: path to the file with the certificate you want to create in your project.
        private_key_file: path to the private key you used to sign the certificate with.
        certificate_name: name for the certificate once it's created in your project.
        description: description of the certificate.

    Returns:
        Dictionary with information about the new global SSL self-signed certificate.
    """
    service = discovery.build("compute", "v1")

    # Read the cert into memory
    with open(certificate_file) as f:
        _temp_cert = f.read()

    # Read the private_key into memory
    with open(private_key_file) as f:
        _temp_key = f.read()

    # Now that the certificate and private key are in memory, you can create the
    # certificate resource
    ssl_certificate_body = {
        "name": certificate_name,
        "description": description,
        "certificate": _temp_cert,
        "privateKey": _temp_key,
    }
    request = service.sslCertificates().insert(
        project=project_id, body=ssl_certificate_body
    )
    response = request.execute()
    pprint(response)
    return response

Pour les certificats SSL régionaux, utilisez la méthode API regionSslCertificates.insert :

from pathlib import Path
from pprint import pprint
from typing import Union

from googleapiclient import discovery


def create_regional_certificate(
    project_id: str,
    region: str,
    certificate_file: Union[str, Path],
    private_key_file: Union[str, Path],
    certificate_name: str,
    description: str = "Certificate created from a code sample.",
) -> dict:
    """
    Create a regional SSL self-signed certificate within your Google Cloud project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        region: name of the region you want to use.
        certificate_file: path to the file with the certificate you want to create in your project.
        private_key_file: path to the private key you used to sign the certificate with.
        certificate_name: name for the certificate once it's created in your project.
        description: description of the certificate.

        Returns:
        Dictionary with information about the new regional SSL self-signed certificate.
    """
    service = discovery.build("compute", "v1")

    # Read the cert into memory
    with open(certificate_file) as f:
        _temp_cert = f.read()

    # Read the private_key into memory
    with open(private_key_file) as f:
        _temp_key = f.read()

    # Now that the certificate and private key are in memory, you can create the
    # certificate resource
    ssl_certificate_body = {
        "name": certificate_name,
        "description": description,
        "certificate": _temp_cert,
        "privateKey": _temp_key,
    }
    request = service.regionSslCertificates().insert(
        project=project_id, region=region, body=ssl_certificate_body
    )
    response = request.execute()
    pprint(response)

    return response

Pour obtenir d'autres exemples de code, consultez la page de référence de l'API.

Étape 3 : Associer un certificat SSL à un proxy cible

Vous devez associer au moins un certificat SSL à chaque proxy HTTPS ou SSL cible. Vous pouvez configurer le proxy cible avec un nombre maximal de certificats SSL par proxy SSL ou HTTPS cible. Vous pouvez référencer plusieurs certificats autogérés sur le même proxy cible.

Console

Lorsque vous utilisez la console Google Cloud pour modifier un équilibreur de charge existant, vous associez automatiquement le certificat SSL au proxy cible approprié.

gcloud

Pour associer un certificat SSL global à un proxy HTTPS cible, exécutez la commande gcloud compute target-https-proxies update avec les options --global et --global-ssl-certificates :

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

Pour associer un certificat SSL global à un proxy SSL cible, exécutez la commande gcloud compute target-ssl-proxies update :

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

Pour associer un certificat SSL régional à un proxy HTTPS cible, exécutez la commande gcloud compute target-https-proxies update avec les options --region et --ssl-certificates-region :

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

Remplacez les éléments suivants :

  • TARGET_PROXY_NAME : nom du proxy cible de l'équilibreur de charge.
  • REGION (le cas échéant) : région du proxy cible régional et du certificat SSL régional ; les régions doivent correspondre.
  • SSL_CERTIFICATE_LIST : liste de noms de certificats SSL Google Cloud, séparés par des virgules.

    Assurez-vous que la liste des certificats référencés inclut tous les certificats SSL valides antérieurs, ainsi que le nouveau certificat SSL. La commande gcloud compute target-ssl-proxies update remplace les valeurs d'origine de --ssl-certificates par la nouvelle valeur.

API

Pour associer un certificat SSL global à un proxy HTTPS cible, envoyez une requête POST à la méthode targetHttpsProxies.insert, en remplaçant PROJECT_ID par l'ID de votre projet.

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
}

Pour associer un certificat SSL global à un proxy HTTPS cible, envoyez une requête POST à la méthode targetSslProxies.insert, en remplaçant PROJECT_ID par l'ID de votre projet.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetSslProxy

{
"name": "l7-ssl-proxy",
"sslCertificates": /projectsPROJECT_IDglobal/sslCertificates/SSL_CERT_NAME
}

Pour associer un certificat SSL régional à un proxy HTTPS cible, envoyez une requête POST à la méthode targetHttpsProxies.insert, en remplaçant PROJECT_ID par l'ID de votre projet.

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
}

Étape 4 : Mettre à jour les enregistrements DNS A et AAAA pour pointer vers l'adresse IP de l'équilibreur de charge

Accédez au site dans lequel vous gérez vos enregistrement DNS (bureau d'enregistrement, hôte DNS ou FAI), puis ajoutez ou mettez à jour les enregistrements DNS de vos domaines et sous-domaines (DNS A pour IPv4, DNS AAAA pour IPv6) afin qu'ils pointent vers l'adresse IP associée à la règle ou aux règles de transfert de l'équilibreur de charge.

Si vous utilisez Cloud DNS et Cloud Domains, configurez vos domaines et mettez à jour vos serveurs de noms.

Si vous utilisez plusieurs domaines pour un même certificat, vous devez ajouter ou mettre à jour des enregistrements DNS pour tous les domaines et sous-domaines, afin qu'ils pointent tous vers l'adresse IP de votre équilibreur de charge.

Une fois la propagation DNS terminée, vous pouvez vérifier votre configuration en exécutant la commande dig. Par exemple, supposons que votre domaine soit www.example.com. Exécutez la commande dig suivante :

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

Dans cet exemple, 203.0.113.5 correspond à l'adresse IP de votre équilibreur de charge.

Étape 5 : Effectuer un test avec OpenSSL

L'utilisation de votre certificat SSL autogéré par votre équilibreur de charge peut prendre jusqu'à 30 minutes.

Pour effectuer un test, exécutez la commande OpenSSL suivante, en remplaçant DOMAIN par votre nom DNS et IP_ADDRESS par l'adresse IP de votre équilibreur de charge.

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

Cette commande génère les certificats que l'équilibreur de charge présente au client. Le résultat doit inclure la chaîne de certificats et Verify return code: 0 (ok) en plus d'autres informations détaillées.

Utiliser des certificats SSL autogérés

Les sections suivantes décrivent comment répertorier, afficher, supprimer et remplacer des ressources de certificats SSL.

Obtenir la liste des certificats SSL

Console

Vous pouvez vérifier l'état de vos certificats SSL globaux dans l'onglet Certificats classiques de la page Gestionnaire de certificats. Les certificats SSL régionaux ne peuvent pas être gérés dans la console Google Cloud. Utilisez gcloud ou l'API REST.

  1. Accédez à l'onglet "Certificats classiques" dans la console Google Cloud.
    Accéder à l'onglet "Certificats classiques"
  2. (Facultatif) Filtrez la liste des certificats SSL.

gcloud

Pour afficher les certificats SSL globaux, exécutez la commande gcloud compute ssl-certificates list avec l'option --global :

gcloud compute ssl-certificates list \
   --global

Pour afficher les certificats SSL régionaux, exécutez la commande gcloud compute ssl-certificates list avec le filtre region :

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

Remplacez les éléments suivants :

  • REGION : région Google Cloud Vous pouvez inclure plusieurs régions sous la forme d'une liste de valeurs séparées par des espaces.

Décrire les certificats SSL

Console

Vous pouvez afficher des détails supplémentaires sur vos certificats SSL globaux dans l'onglet Certificats classiques de la page Gestionnaire de certificats.

  1. Accédez à la page "Certificats classiques" dans la console Google Cloud.
    Accéder à la page "Certificats classiques"
  2. (Facultatif) Filtrez la liste des certificats SSL.
  3. Pour afficher plus de détails, cliquez sur le nom du certificat.

gcloud

Pour décrire un certificat SSL global, exécutez la commande gcloud compute ssl-certificates describe avec l'option --global :

gcloud  compute ssl-certificates describe CERTIFICATE_NAME \
   --global

Pour décrire un certificat SSL régional, exécutez la commande gcloud compute ssl-certificates describe avec l'option --region :

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME : nom du certificat SSL
  • REGION : région Google Cloud

Supprimer des certificats SSL

Avant de pouvoir supprimer un certificat SSL, vous devez d'abord mettre à jour chaque proxy cible qui fait référence à ce certificat. Pour chaque proxy cible, exécutez la commande gcloud update appropriée afin de mettre à jour sa liste SSL_CERTIFICATE_LIST, de sorte qu'il n'inclue plus le certificat SSL que vous souhaitez supprimer. Chaque proxy SSL ou HTTPS cible doit faire référence à au moins un certificat SSL.

Après avoir mis à jour le proxy cible, vous pouvez supprimer le certificat SSL.

Console

Vous pouvez supprimer des certificats SSL globaux dans l'onglet Certificats classiques de la page Gestionnaire de certificats.

  1. Accédez à l'onglet "Certificats classiques" dans la console Google Cloud.
    Accéder à l'onglet "Certificats classiques"
  2. Sélectionnez le certificat SSL que vous souhaitez supprimer.
  3. Cliquez sur Supprimer.
  4. Pour confirmer, cliquez de nouveau sur Supprimer.

gcloud

Pour supprimer un certificat SSL global, exécutez gcloud compute ssl-certificates delete avec la commande --global :

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

Pour supprimer un certificat SSL régional, exécutez gcloud compute ssl-certificates delete avec la commande --region :

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME : nom du certificat SSL
  • REGION : région Google Cloud

Remplacer ou renouveler un certificat SSL avant son expiration

Suivez les étapes ci-dessous si vous devez remplacer ou renouveler un certificat SSL, ou effectuer sa rotation :

  1. Exécutez la commande gcloud compute ssl-certificates describe pour le certificat actuel afin de vérifier s'il est sur le point d'expirer.

  2. Créez une ressource de certificat SSL. Le nouveau certificat SSL doit posséder un nom unique au sein du projet.

  3. Mettez à jour le proxy cible pour dissocier l'ancien certificat SSL et ajouter le nouveau. Veillez à inclure tous les autres certificats SSL existants que vous souhaitez conserver.

    Pour éviter les temps d'arrêt, exécutez une commande gcloud unique avec l'option --ssl-certificates. Exemple :

    Pour les équilibreurs de charge d'application externes globaux :

    Exécutez la commande gcloud compute target-https-proxies update avec l'option --global.

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

    Pour les équilibreurs de charge d'application externes régionaux et internes :

    Exécutez la commande gcloud compute target-https-proxies update avec l'option --region.

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

    Pour les équilibreurs de charge réseau proxy externes :

    Exécutez la commande gcloud compute target-ssl-proxies update avec l'option --backend-service.

    gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
       --ssl-certificates=new-ssl-cert,other-certificates
    
  4. Vérifiez que l'équilibreur de charge diffuse le certificat de remplacement en exécutant la commande OpenSSL suivante :

    echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
    
  5. Patientez 15 minutes pour vous assurer que l'opération de remplacement a été propagée à tous les serveurs GFE (Google Front End).

  6. (Facultatif) Supprimez l'ancien certificat SSL.

Effectuer une rotation régulière des certificats SSL

Cet exemple de solution vérifie régulièrement l'état des certificats utilisés avec les équilibreurs de charge Google Cloud et effectue une rotation des certificats lorsqu'ils atteignent un pourcentage donné de leur durée de vie. L'outil utilise les autorités de certification configurées à l'aide de Certificate Authority Service.

Cette solution fonctionne avec les équilibreurs de charge suivants :

  • Équilibreur de charge d'application externe global
  • Équilibreur de charge d'application classique
  • Équilibreur de charge d'application externe régional
  • Équilibreur de charge d'application interne
  • Équilibreur de charge réseau proxy externe avec un proxy SSL

Étape suivante