Sécuriser les domaines personnalisés avec SSL

La compatibilité SSL d'App Engine offre des points de terminaison SSL répartis dans le monde entier et un équilibrage de charge intégré pour diffuser votre application auprès d'un public mondial de manière sécurisée, fiable et rapide.

Par défaut, les connexions HTTPS de votre domaine personnalisé sont activées automatiquement à l'aide de certificats SSL gérés. Après avoir mappé un domaine personnalisé à votre application et mis à jour vos enregistrements DNS, App Engine provisionne un certificat SSL géré, le renouvelle et le révoque lorsque vous supprimez le domaine personnalisé de votre application.

Avant de commencer

  • Assurez-vous d'avoir préalablement configuré votre domaine personnalisé dans le projet App Engine.

  • Si vous utilisez Cloud Load Balancing et des NEG sans serveur pour acheminer le trafic vers votre application App Engine, nous vous recommandons de mapper votre domaine personnalisé à l'équilibreur de charge plutôt que de le mapper directement à votre application. Nous vous recommandons également d'utiliser des certificats SSL créés pour l'équilibreur de charge. Cela dispense d'avoir à gérer des certificats SSL distincts pour chaque application sans serveur. De plus, avec Cloud Load Balancing, vous pouvez définir des règles SSL contrôlant les fonctionnalités SSL que votre équilibreur de charge négocie avec les clients. Pour en savoir plus, consultez les pages suivantes :

    Tenez compte de la limitation suivante :

    • Nous vous recommandons d'utiliser des contrôles d'entrée afin que votre application ne reçoive que les requêtes envoyées par l'équilibreur de charge (et par le VPC le cas échéant). Sinon, les utilisateurs peuvent se servir de l'URL App Engine de votre application pour contourner l'équilibreur de charge, les règles de sécurité Google Cloud Armor, les certificats SSL et les clés privées qui sont transmises via l'équilibreur de charge.

Valider un certificat géré

Une fois que vous avez configuré votre domaine personnalisé et mis à jour les enregistrements DNS, un certificat SSL géré est automatiquement fourni en quelques minutes. La sélection de l'autorité de certification est automatique ; Le certificat géré est signé soit par Google Trust Services (GTS), soit par Encrypt.

Pour vérifier que le certificat a été provisionné, procédez comme suit :

  1. Dans la console Google Cloud, accédez à App Engine > Paramètres > Domaines personnalisés :

    Accéder à l'onglet Domaines personnalisés

  2. La sécurité SSL affiche l'option géré par Google.

Résoudre les problèmes liés aux certificats SSL gérés

  • Vous devrez peut-être mettre à jour les enregistrements DNS de votre domaine personnalisé pour valider le nom de domaine. App Engine ne peut pas provisionner des certificats pour des domaines non validés.

  • Vous pouvez vérifier l'état du certificat avec l'API Admin à l'aide d'une requête AuthorizedCertificate.GET.

  • Si un certificat géré n'a pas été provisionné en raison de l'indisponibilité des enregistrements DNS, le champ ManagedCertificate.ManagementStatus peut avoir la valeur FAILED_RETRYING_NOT_VISIBLE. Vérifiez que vos enregistrements DNS sont à jour, attendez quelques minutes, puis réessayez. Un délai de 24 heures est parfois nécessaire pour que les enregistrements DNS soient disponibles.

  • Si l'état indique FAILED_PERMANENT, cela signifie que toutes les tentatives de renouvellement ont échoué. Vérifiez les paramètres DNS, puis mettez à jour le mappage de domaine personnalisé en suivant la procédure permettant de passer à des certificats SSL gérés.

Passer à des certificats SSL gérés

Avant de passer à des certificats SSL gérés par Google, notez que ceux-ci ne sont pas compatibles avec les mappages génériques.

Si vous utilisez des sous-domaines et que le certificat est émis par Let's Encrypt, la limite est de 50 certificats gérés par semaine pour chaque domaine de base. Si vous atteignez cette limite, App Engine continue d'essayer de délivrer des certificats gérés jusqu'à ce que toutes les requêtes soient traitées.

Pour passer de vos propres certificats SSL à des certificats SSL gérés par Google, ou pour ajouter des certificats SSL gérés à une application existante avec un domaine personnalisé, mettez à jour le mappage de votre domaine en procédant comme suit :

  1. Dans la console Google Cloud, accédez à App Engine > Paramètres > Domaines personnalisés :

    Accéder à l'onglet Domaines personnalisés

  2. Sélectionnez le domaine que vous souhaitez sécuriser, puis cliquez sur Activer la sécurité gérée.

Désactiver les certificats SSL gérés

Pour désactiver les certificats SSL gérés, procédez comme suit :

  1. Dans la console Google Cloud, accédez à App Engine > Paramètres > Domaines personnalisés :

    Accéder à l'onglet Domaines personnalisés

  2. Sélectionnez le domaine et cliquez sur Désactiver la sécurité gérée.

Utiliser vos propres certificats SSL

Plutôt que des certificats SSL gérés, vous pouvez utiliser votre propre certificat. Si ce certificat n'a pas de preuve de transparence, votre application peut afficher des avertissements SSL dans Chrome du fait de l'existence de règles exigeant ce type de preuve. Pour en savoir plus sur les preuves de transparence des certificats et sur la manière de s'y conformer, consultez la page Appliquer la transparence des certificats.

Pour utiliser et gérer vos propres certificats SSL plutôt que des certificats gérés par Google, procédez comme suit :

  1. Assurez-vous d'avoir préalablement configuré votre domaine personnalisé dans le projet App Engine.

  2. Désactivez les certificats gérés par Google par défaut.

  3. Obtenez un certificat pour le domaine auprès de l'autorité de certification de votre choix. La procédure exacte peut varier suivant l'autorité. Consultez la section Obtenir un certificat pour en connaître les étapes types.

  4. Convertissez les fichiers de la clé privée et du certificat SSL dans des formats compatibles avec App Engine. Avant de pouvoir importer vos fichiers, vous devez convertir votre clé privée en une clé privée RSA et concaténer vos certificats SSL en un seul fichier. Pour en savoir plus, consultez la section Convertir des clés privées et concaténer des certificats SSL.

  5. Vérifiez que vous disposez des autorisations appropriées dans la console Google Cloud et que vous avez validé la propriété (étape 3) de tous les domaines associés ou de leurs domaines parents. Exemple :

    • Si le certificat concerne www.example.com, vous pouvez valider la propriété de www.example.com ou de example.com.
    • Si le certificat concerne www.example.com et sub.example.com, vous pouvez valider la propriété de www.example.com et de sub.example.com, ou de example.com.
    • Si le certificat concerne *.example.com, vous pouvez valider la propriété de example.com.
  6. Importez la clé privée et le certificat SSL, puis mappez le domaine à l'application :

    1. Dans la console Google Cloud, accédez à App Engine > Paramètres > Certificats SSL :

      Accéder à la page "Certificats SSL"

    2. Cliquez sur Upload a new certificate (Importer un nouveau certificat).

    3. Importez le certificat SSL concaténé sous la forme PEM encoded X.509 public key certificate (par exemple, concat.crt). Importez ensuite la clé privée RSA sous la forme Clé privée RSA non chiffrée encodée au format PEM (par exemple, myserver.key.pem).
    4. Cliquez sur Importer. Chaque certificat SSL que vous importez est visible et disponible pour tous vos autres projets Google Cloud. Vous n'avez donc pas besoin d'importer le même certificat à plusieurs reprises.
    5. Sélectionnez le certificat que vous souhaitez attribuer à un domaine, puis cliquez sur Enregistrer afin d'utiliser le protocole SSL pour ce domaine.

  7. Testez les modifications en accédant au domaine depuis votre navigateur en utilisant https. Par exemple : https://www.example.com.

Transférer les mappages d'un certificat actif vers un nouveau certificat

Lorsqu'un certificat approche de sa date d'expiration, vous devez en importer un nouveau et transférer les mappages existants de l'ancien certificat vers le nouveau. La procédure suivante suppose que le certificat existant n'a pas encore expiré et qu'il est actuellement actif sur votre domaine personnalisé.

Pour transférer des mappages à partir d'un certificat actif, procédez comme suit :

  1. Obtenez un nouveau certificat pour votre domaine auprès de l'autorité de certification de votre choix. Pour connaître les étapes à suivre, consultez la section Obtenir un certificat.

  2. Convertissez les fichiers de la clé privée et du certificat SSL dans des formats compatibles avec App Engine. Pour en savoir plus, consultez la section Convertir des clés privées et concaténer des certificats SSL.

  3. Importez la clé privée RSA et le certificat SSL concaténé :

    1. Importez le certificat SSL sur la page SSL certificates (Certificats SSL).

      Accéder à la page "Certificats SSL"
      1. Cliquez sur Upload a new certificate (Importer un nouveau certificat).

      2. Importez le certificat SSL concaténé sous Certificat de clé publique X.509 encodée au format PEM (par exemple, concat.crt). Importez ensuite la clé privée RSA sous Clé privée RSA non chiffrée encodée au format PEM (par exemple, myserver.key.pem).
      3. Cliquez sur Importer.
    2. Sélectionnez le certificat que vous venez d'ajouter dans la liste, puis cliquez sur le domaine diffusé par l'ancien certificat.
    3. Cliquez sur Enregistrer pour transférer les mappages de l'ancien certificat vers le nouveau.

Obtenir un certificat

Le processus d'obtention d'un certificat SSL varie en fonction de l'autorité de certification que vous utilisez. Vous devrez peut-être adapter légèrement les instructions fournies ici. En règle générale, chaque autorité de certification fournit des consignes pour vous guider tout au long du processus.

Pour obtenir un certificat à utiliser avec votre application App Engine, procédez comme suit :

  1. Générez la clé privée et une requête de signature de certificat (CSR) à l'aide de l'outil openssl :

    1. Exécutez la commande suivante à partir du répertoire dans lequel vous souhaitez créer le fichier server.csr :

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      où :

      • [MY_PRIVATE_KEY].key est le fichier généré dans lequel la clé privée est stockée. Exemple : myserver.key
      • [MY_CSR].csr est le fichier généré pour votre requête de signature de certificat. Exemple : server.csr
    2. Lorsque vous y êtes invité, saisissez les informations suivantes :

      • Votre code pays à deux caractères, par exemple : US pour les États-Unis
      • Le nom de votre ville
      • Le nom de votre entreprise (utilisez votre propre nom si vous n'avez pas d'entreprise)
      • Votre unité organisationnelle (ou NA si vous n'en avez pas)
      • Un nom commun qui représente votre domaine, par exemple : www.example.com
      • Votre adresse e-mail

      Vous n'avez pas besoin de renseigner les autres informations. Elles sont toutes facultatives.

  2. Déterminez l'autorité de certification qui vous convient, puis achetez un certificat. Par exemple, vous pouvez utiliser SSLMate, Thawte, Comodo ou toute autre autorité de certification.

    Pour en savoir plus sur les types de certificats compatibles, consultez la section Compatibilité d'App Engine avec les certificats SSL.

  3. Lorsque l'autorité de certification demande le contenu de votre fichier CSR, suivez ses instructions pour copier et coller le contenu du fichier .csr que vous avez généré précédemment. Exemple : server.csr.

  4. Suivez les instructions lorsque votre autorité de certification demande l'approbation du propriétaire de domaine.

  5. Une fois que vous avez fourni l'approbation du propriétaire du domaine, l'autorité de certification vous envoie le certificat, qui est généralement un fichier ZIP. Décompressez ce fichier dans un répertoire de travail afin de pouvoir concaténer ces certificats pour les importer dans App Engine.

Convertir des clés privées et concaténer des certificats SSL {#convert_private_keys_and_concatenate_ssl_certificates}

Vous devez convertir votre clé privée en clé privée RSA et concaténer tous vos certificats SSL avant de pouvoir importer ces éléments dans App Engine.

  1. Convertissez le fichier de clé privée que vous avez généré précédemment en clé privée RSA non chiffrée. Par exemple, vous pouvez exécuter la commande openssl rsa suivante :

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    où :

    • [MY_PRIVATE_KEY].key est le fichier généré dans lequel la clé privée est stockée. Exemple : myserver.key
    • [MY_RSA_KEY].key est le fichier généré qui contient la clé privée RSA non chiffrée. Exemple : myserver.key.pem

      Exemple :

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Concaténez tous les fichiers .crt provenant de votre autorité de certification en un seul fichier, à l'aide de la commande suivante :

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    Où :

    • [MY_DOMAIN_CERT].crt est le certificat du domaine. Exemple : www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt et [MY_TrustExternalCARoot].crt sont les autres fichiers de certificats fournis par votre autorité de certification.
    • [MY_CONCAT_CERT].crt est le fichier concaténé qui contient tous les fichiers de certificats .crt provenant de l'autorité de certification. Exemple : concat.crt

      Exemple :

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Validez le certificat SSL et la clé privée comme suit :

    1. Pour vérifier que la clé privée et le certificat correspondent, vous pouvez exécuter les commandes openssl x509 et openssl rsa. Par exemple :

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      Les commandes openssl x509 et openssl rsa doivent renvoyer le même résultat.

    2. Pour vérifier qu'un certificat et sa chaîne d'autorité de certification sont valides, utilisez la commande openssl verify. Exemple :

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Lorsque vous êtes prêt, vous pouvez importer la clé privée RSA et les certificats concaténés dans App Engine.

Compatibilité d'App Engine avec les certificats SSL

App Engine est compatible avec les types de certificats suivants :

  • Certificat de domaine unique ou de nom d'hôte
  • Certificat autosigné
  • Certificat générique
  • Certificat SAN ou de domaine multiple

Vos certificats et clés sont soumis aux restrictions suivantes :

  • La clé privée et le certificat doivent être importés au format PEM.
  • Les clés privées ne doivent pas être chiffrées.
  • Un fichier de certificat peut contenir cinq certificats maximum. Ce nombre inclut les certificats en chaîne et intermédiaires.
  • Tous les noms de sujet indiqués sur le certificat de l'hôte doivent correspondre aux domaines validés de l'utilisateur ou être des sous-domaines de ceux-ci.
  • Les clés privées doivent utiliser le chiffrement RSA.
  • Le module de clé maximal autorisé est de 2 048 bits.

Si le certificat de l'hôte nécessite un certificat intermédiaire ou en chaîne (comme c'est le cas avec de nombreuses autorités de certification), vous devrez ajouter le certificat intermédiaire ou en chaîne à la fin du fichier de certificat public.

Certaines fonctionnalités d'App Engine utilisent des sous-domaines particuliers. Par exemple, une application peut se servir de sous-domaines pour s'adresser à des services d'application ou à différentes versions de votre application. Pour les utiliser avec SSL, il peut s'avérer judicieux de configurer un certificat SAN ou générique. Les certificats génériques n'acceptent qu'un seul niveau de sous-domaine.

Supprimer des certificats SSL personnalisés

Pour arrêter d'utiliser un certificat SSL personnalisé, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page des paramètres des certificats SSL App Engine.

    Accéder aux paramètres des certificats SSL

  2. Cliquez sur le certificat que vous souhaitez supprimer de votre domaine.

  3. Désélectionnez le nom de domaine pour lequel vous ne souhaitez plus utiliser le certificat SSL, puis cliquez sur Enregistrer.

Utiliser des en-têtes Strict Transport Security

Pour des raisons de sécurité, toutes les applications doivent inciter les clients à utiliser des connexions https. Pour indiquer au navigateur de privilégier https à http, utilisez l'en-tête Strict-Transport-Security.

Afficher les versions et algorithmes de chiffrement TLS activés

  1. Installez le scanner réseau nmap sur votre ordinateur si ce n'est pas déjà fait. Consultez le site https://nmap.org/ pour obtenir des instructions d'installation.

  2. Pour savoir quelles versions et algorithmes de chiffrement TLS sont activés pour votre application, saisissez la commande suivante :

    nmap -sV --script ssl-enum-ciphers -p 443 HOSTNAME

    Remplacez HOSTNAME par le nom d'hôte de votre application. Vous pouvez utiliser votre domaine personnalisé ou le nom d'hôte appspot.com créé par App Engine pour votre application. Exemple :

    nmap -sV --script ssl-enum-ciphers -p 443 example.uc.r.appspot.com

Désactiver les versions et algorithmes de chiffrement TLS

Si vous utilisez Cloud Load Balancing et des NEG sans serveur pour acheminer le trafic vers votre application App Engine, vous pouvez désactiver une version ou un algorithme de chiffrement TLS en définissant une règle de sécurité SSL qui spécifie les versions et algorithmes de chiffrement TLS pouvant être utilisés pour les connexions HTTPS ou SSL.