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)

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

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 :

Équilibreurs de charge

Un certificat SSL est requis pour configurer certains types d'équilibreurs de charge Google Cloud, y compris :

É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.

Vous pouvez créer une clé privée avec chiffrement RSA-2048 au format PEM à l'aide de la commande OpenSSL suivante.

openssl genrsa -out PRIVATE_KEY_FILE 2048

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

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.
  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
    
    [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 les deux étapes, remplacez les espaces réservés par des valeurs valides :

  • CONFIG_FILE : chemin d'accès, y compris le nom de fichier, 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, y compris le nom de fichier, à 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.

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.

Gérer votre propre autorité de certification

  • 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 créez un certificat autosigné. Les certificats autosignés ne sont pas approuvés par les clients, sauf si le client est configuré pour ignorer la validation des certificats. Par exemple, un client de navigateur Web affiche un message vous demandant si vous souhaitez approuver un certificat autosigné. Vous ne devez utiliser que des certificats autosignés pour les tests.

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 \
    -days TERM

Remplacez les espaces réservés par des valeurs valides :

  • 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 valide 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.

Console

Vous pouvez utiliser des certificats SSL globaux dans l'onglet Certificats.

  1. Accédez à l'onglet "Certificats" dans Google Cloud Console.
    Accéder à l'onglet "Certificats"
  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 pouvant être utilisé pour les équilibreurs de charge HTTP(S) externes ou les équilibreurs de charge proxy SSL, 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 pouvant être utilisé pour les équilibreurs de charge HTTP(S) internes, 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 espaces réservés par des valeurs valides :

  • 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 HTTP(S) interne, la région doit être identique à celle de l'équilibreur de charge HTTP(S) interne.

api

Pour les équilibreurs de charge proxy SSL et HTTPS externes, utilisez la méthode API sslCertificates.insert.

Pour les équilibreurs de charge HTTPS internes, utilisez la méthode API regionSslCertificates.insert.

Avant de pouvoir utiliser ces méthodes, 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. Pour obtenir des 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 Google Cloud Console 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 pour un équilibreur de charge HTTP(S) externe, 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=CERTIFICATE_LIST \
    --global-ssl-certificates

Pour associer un certificat SSL global à un proxy SSL cible pour un équilibreur de charge proxy SSL, utilisez la commande gcloud compute target-ssl-proxies update :

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

Pour associer un certificat SSL régional à un proxy HTTPS cible pour un équilibreur de charges HTTP(S) interne, 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=CERTIFICATE_LIST \
    --ssl-certificates-region=REGION

Remplacez les espaces réservés par des valeurs valides :

  • TARGET_PROXY_NAME : nom du proxy cible de l'équilibreur de charge
  • CERTIFICATE_LIST : liste de noms de certificats SSL Google Cloud, séparés par des virgules
  • REGION : le cas échéant, région du proxy cible régional et du certificat SSL régional

É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 Google 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:
;; flags: ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL:

;; PSEUDOSECTION:
; EDNS: version: 0, flags:; udp:
;; SECTION:
;www.example.com.

;; SECTION:
www.example.com.   www.example.com.edgekey.net.
www.example.com.edgekey.net.   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net.   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net.   203.0.113.5

;; time:
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 16:54:44
;;  rcvd: 31748 qr rd 1 OPT 512 QUESTION IN A ANSWER 1742 IN CNAME 21330 IN CNAME 3356 IN CNAME 19 IN A Query 43 msec Wed Jun 03 PDT 2020 MSG SIZE 193>

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

Étape 5 : Effectuer un test avec OpenSSL

Une fois que l'état du certificat et du domaine est actif, votre équilibreur de charge peut prendre jusqu'à 30 minutes pour commencer à utiliser le certificat SSL autogéré.

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.

Répertorier des certificats SSL

Console

Vous pouvez vérifier l'état de vos certificats SSL globaux dans l'onglet Certificats de la page Équilibrage de charge.

  1. Accédez à la page Certificats dans Google Cloud Console.
    Accéder à la page "Certificats"
  2. (Facultatif) Filtrez la liste des certificats SSL.

gcloud

Pour répertorier les certificats SSL globaux pouvant être utilisés pour les équilibreurs de charge HTTP(S) externes ou les équilibreurs de charge proxy SSL, exécutez la commande gcloud compute ssl-certificates list avec l'option --global :

gcloud compute ssl-certificates list \
   --global

Pour répertorier les certificats SSL régionaux pouvant être utilisés pour les équilibreurs de charge HTTP(S) internes, exécutez la commande gcloud compute ssl-certificates list avec le filtre region :

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

Remplacez les espaces réservés par des valeurs valides :

  • 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 des certificats SSL

Console

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

  1. Accédez à la page Certificats dans Google Cloud Console.
    Accéder à la page "Certificats"
  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 (pour les équilibreurs de charge HTTP(S) externes ou les équilibreurs de charge proxy SSL), 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 (pour les équilibreurs de charge HTTP(S) internes), exécutez la commande gcloud compute ssl-certificates describe avec l'option --region :

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

Remplacez les espaces réservés par des valeurs valides :

  • 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 CERTIFICATE_LIST, de sorte qu'il n'inclue plus le certificat SSL que vous souhaitez supprimer. Notez que 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 de la page Équilibrage de charge.

  1. Accédez à la page Certificats dans Google Cloud Console.
    Accéder à la page "Certificats"
  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 (pour les équilibreurs de charge proxy SSL ou HTTP(S) externes), 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 (pour les équilibreurs de charge HTTP(S) internes), exécutez gcloud compute ssl-certificates delete avec la commande --region :

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

Remplacez les espaces réservés par des valeurs valides :

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

Remplacer les certificats SSL

Suivez les étapes ci-dessous si vous devez remplacer ou alterner un certificat SSL :

  1. Créez une ressource de certificat SSL. Le nouveau certificat SSL doit posséder un nom unique au sein du projet.
  2. Mettez à jour le proxy cible afin que sa liste de certificats SSL intègre le nouveau certificat SSL en première position pour qu'il devienne le certificat principal. Après ce nouveau certificat, incluez tous les certificats SSL existants que vous souhaitez conserver. Veillez à exclure l'ancien certificat SSL dont vous n'avez plus besoin. Pour éviter les temps d'arrêt, exécutez une commande gcloud unique avec l'option --ssl-certificates. Exemple :

    Pour les équilibreurs de charge HTTP(S) externes :

    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 HTTP(S) 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 proxy SSL :

    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
    
  3. 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
    
  4. Patientez 15 minutes pour vous assurer que le certificat de remplacement est disponible pour tous les serveurs GFE (Google Front End).

  5. (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 :

  • Équilibreurs de charge HTTP(S) externes
  • Équilibreurs de charge HTTP(S) internes
  • Équilibreurs de charge proxy SSL

Étape suivante