Sécuriser les domaines personnalisés avec SSL

La compatibilité SSL de l'application App Engine va au-delà du protocole SSL de base en offrant des points de terminaison SSL distribués 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. Une fois que le domaine personnalisé est mappé à votre application et que vous avez configuré vos enregistrements DNS, App Engine provisionne un certificat SSL géré, procède à son renouvellement avant son expiration et le révoque lorsque vous supprimez le domaine personnalisé de votre application.

Avant de commencer

Vérifier qu'un certificat géré a été provisionné

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. Ce certificat est signé par Let's Encrypt.

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

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

    Accéder à la page Domaines personnalisés

  2. La valeur de SSL security (Sécurité SSL) doit être définie sur l'option Google managed (Géré par Google) :

    Sécurité SSL gérée par Google

gcloud
  1. Exécutez la commande gcloud app domain-mappings suivante afin de vérifier que le certificat a été provisionné pour votre application App Engine :

    gcloud app domain-mappings list
  2. Vous devez voir la liste de vos domaines et sous-domaines, ainsi que tous leurs certificats correspondants ; par exemple :

    ID               SSL_CERTIFICATE_ID
    example.com      123456
    www.example.com  234567
    Le provisionnement du certificat peut prendre quelques minutes. Pendant ce temps, le certificat apparaît sous la forme PENDING_AUTO_CERT.

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 de certificats pour des domaines non validés.

  • Vous pouvez vérifier l'état de votre 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 indiquera peut-être 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, sachez qu'il existe une limite de 20 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 :

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

    Accéder à la page Domaines personnalisés

  2. Sélectionnez le domaine que vous souhaitez sécuriser, puis cliquez sur Enable SSL security (Activer la sécurité SSL).

    Activer la sécurité SSL à partir de la page "Domaines personnalisés"

gcloud

Exécutez la commande gcloud app domain-mappings suivante pour mettre à jour le mappage du domaine à votre application :

gcloud app domain-mappings update DOMAIN --certificate-management='AUTOMATIC'
API

Pour mettre à jour le mappage de domaine de manière automatisée afin de passer à des certificats SSL gérés, consultez la méthode apps.domainMappings.patch de l'API Admin.

Désactiver les certificats SSL gérés

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

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

    Accéder à la page Domaines personnalisés

  2. Sélectionnez le domaine et cliquez sur Disable SSL security (Désactiver la sécurité SSL).

    Désactiver la sécurité SSL à partir de la page "Domaines personnalisés"

gcloud

Vous pouvez désactiver un certificat SSL géré qui est déjà associé à un mappage de domaine. Vous pouvez également choisir de ne pas utiliser de certificat SSL géré lorsque vous mappez le domaine personnalisé pour la première fois.

  • Pour supprimer le certificat d'un mappage existant, exécutez la commande gcloud app domain-mappings suivante :

    gcloud app domain-mappings update DOMAIN --certificate-management='MANUAL'
    
  • Pour ne pas utiliser de certificat SSL géré lorsque vous mappez un nouveau domaine personnalisé à votre application pour la première fois, utilisez la commande suivante :

    gcloud app domain-mappings create DOMAIN --certificate-management='MANUAL'
    
API

Pour désactiver les certificats SSL gérés de manière automatisée, spécifiez la gestion SSL manuelle avec la méthode apps.domainMappings.patch de l'API Admin.

Utiliser vos propres certificats SSL

Plutôt que des certificats SSL gérés, vous pouvez utiliser votre propre certificat. Si ce dernier 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 (CA) 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 GCP 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 celle de example.com.
    • Si le certificat concerne *.example.com, vous devez valider la propriété de example.com.
  6. Importez la clé privée et le certificat SSL, puis mappez le domaine à l'application :

    Console
    1. Dans la console Google Cloud Platform, accédez à App Engine > Paramètres > SSL Certificates (Certificats SSL).

      Accéder à la page SSL Certificates (Certificats SSL)

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

      Importer un 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 importé est visible et utilisable par tous vos autres projets GCP. Vous n'avez donc pas à importer le même certificat plusieurs fois.
    5. Sélectionnez le certificat que vous souhaitez attribuer à un domaine, puis cliquez sur Enregistrer afin d'utiliser le protocole SSL pour ce domaine.
    gcloud
    1. Exécutez la commande gcloud app ssl-certificates suivante pour importer le certificat SSL et la clé privée :
      gcloud app ssl-certificates create --display-name CERT_DISPLAY_NAME --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

      où :

      • CERT_DISPLAY_NAME est le nom à afficher que vous avez choisi pour le certificat.
        Exemple : example.com
      • CERT_DIRECTORY_PATH est le chemin d'accès au répertoire et le nom de fichier du certificat.
        Exemple : ./cert.crt
      • KEY_DIRECTORY_PATH est le chemin d'accès au répertoire et le nom de fichier de la clé privée.
        Exemple : ./private.key

      Exemple :

      gcloud app ssl-certificates create --display-name example.com --certificate ./cert.crt --private-key ./private.key
    2. Exécutez la commande gcloud app domain-mappings suivante pour créer le mappage entre le domaine et l'application App Engine avec le protocole SSL :
      gcloud app domain-mappings create DOMAIN --certificate-id CERT_ID

      où :

      • DOMAIN est le domaine que vous souhaitez mapper à l'application App Engine.
        Exemple : *.example.com

        Conseil : Placez votre domaine entre guillemets simples si vous recevez une erreur lors de l'utilisation de mappages génériques. Exemple : '*.example.com'.

      • CERT_ID est l'ID du certificat que vous souhaitez utiliser pour le protocole SSL.
        Exemple : --certificate-id 1234

      Exemple :

      gcloud app domain-mappings create '*.example.com' 1234

  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. Pour la procédure suivante, nous partons du principe que le certificat existant n'a pas encore expiré et qu'il est actuellement actif sur le domaine personnalisé.

Pour transférer des mappages depuis un certificat actif, procédez comme suit :

  1. Obtenez un nouveau certificat pour le domaine auprès de l'autorité de certification (CA) de votre choix. Consultez la section Obtenir un certificat pour connaître les étapes types.

  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é :

    Console
    1. Importez le certificat SSL sur la page "Certificats SSL".

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

        Importer un certificat
      2. Importez le certificat SSL concaténé sous la forme Certificat de clé publique X.509 encodé au format PEM (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).
      3. Cliquez sur Importer.
    2. Sélectionnez le certificat que vous venez d'ajouter à partir de 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.
    gcloud

    Exécutez la commande gcloud app ssl-certificates suivante pour mettre à jour le certificat SSL et la clé privée :

    gcloud app ssl-certificates update CERT_ID --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

    où :

    • CERT_ID est l'ID du certificat SSL que vous souhaitez mettre à jour.
      Exemple : 1234
    • CERT_DIRECTORY_PATH est le chemin d'accès au répertoire et le nom de fichier du certificat SSL.
      Exemple : ./cert.crt
    • KEY_DIRECTORY_PATH est le chemin d'accès au répertoire et le nom de fichier de la clé privée.
      Exemple : ./private.key

    Exemple :

    gcloud app ssl-certificates update 1234 --certificate ./cert.crt --private-key ./private.key

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 demande de signature de certificat (CSR, Certificate Signing Request) à 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 demande 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 du 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. Lorsque l'autorité de certification demande l'approbation du propriétaire du domaine, suivez les instructions.

    Conseil : La méthode d'approbation par e-mail vous semblera peut-être plus facile à utiliser. Vous devrez configurer une adresse e-mail dans votre compte de domaine, par exemple admin@example.com, pour pouvoir recevoir la demande d'approbation de l'autorité de certification et y répondre.

  5. Une fois que vous avez fourni l'approbation du propriétaire du domaine, l'autorité de certification vous envoie le certificat, généralement au format .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

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é dans lequel la clé privée RSA non chiffrée est stockée. Exemple : myserver.key.pem

      Exemple :

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Concaténez tous les fichiers .crt fournis par 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 l'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. Exemples :

      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 ce dernier à 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, configurer un certificat SAN ou générique peut s'avérer judicieux. Les certificats génériques ne sont compatibles qu'avec un seul niveau de sous-domaine.

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. Vous pouvez vous servir de l'en-tête Strict-Transport-Security pour indiquer au navigateur de choisir https plutôt que http.

Vous devez faire preuve de prudence lors de la mise en œuvre de l'en-tête HTTP Strict Transport Security. Les clients ayant précédemment reçu l'en-tête refuseront de se connecter si https n'est plus fonctionnel ou est désactivé pour une raison quelconque. Pour en savoir plus, consultez la page Aide-mémoire sur HTTP Strict Transport Security.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python 2