Protezione dei domini personalizzati con SSL

Il supporto SSL per la tua app App Engine va ben oltre i confini offerti da SSL di base offrendo endpoint SSL a livello globale e bilanciamento del carico integrato per offrire la tua app in modo sicuro, affidabile e rapido a un pubblico globale.

Per impostazione predefinita, le connessioni HTTPS sul tuo dominio personalizzato verranno attivate automaticamente utilizzando i certificati SSL gestiti. Una volta mappato il dominio personalizzato all'applicazione e configurati i record DNS, App Engine esegue il provisioning di un certificato SSL gestito, gestisce il rinnovo del certificato prima della scadenza e lo revoca quando si rimuove il dominio personalizzato dall'applicazione.

Prima di iniziare

  • Assicurati di avere già impostato il dominio personalizzato nel progetto App Engine.

  • Se utilizzi Cloud Load Balancing e NEGS serverless per indirizzare il traffico alla tua app App Engine, ti consigliamo di mappare il tuo dominio personalizzato al bilanciatore del carico anziché direttamente alla tua app e utilizzare i certificati SSL creati per il bilanciatore del carico. Ciò elimina la necessità di gestire certificati SSL separati per ogni app serverless. Inoltre, con Cloud Load Balancing puoi impostare criteri SSL che controllano le funzionalità di SSL negoziate dal tuo bilanciatore del carico con i client. Per ulteriori informazioni, consulta le seguenti pagine:

    Tieni presente la seguente limitazione:

    • Ti consigliamo di utilizzare i controlli in entrata in modo che la tua applicazione riceva solo le richieste inviate dal bilanciatore del carico (e dal VPC se lo utilizzi). In caso contrario, gli utenti possono utilizzare l'URL di App Engine dell'app per aggirare il bilanciatore del carico, i criteri di sicurezza di Google Cloud Armor, i certificati SSL e le chiavi private trasmesse attraverso il bilanciatore del carico.

Verificare il provisioning di un certificato gestito

Dopo che hai configurato il tuo dominio personalizzato e aggiornato i record DNS, in pochi minuti verrà fornito automaticamente un certificato SSL gestito. Il certificato gestito è firmato da Google Trust Services (GTS) o da Let's Encrypt.

Per verificare che il provisioning del certificato sia stato eseguito:

  1. In Google Cloud Console, vai ad App Engine > Impostazioni > Domini personalizzati:

    Vai alla pagina Domini personalizzati

  2. La sicurezza SSL viene visualizzata come Gestita da Google.

Risoluzione dei problemi relativi ai certificati SSL gestiti

  • Potrebbe essere necessario aggiornare i record DNS per il tuo dominio personalizzato per verificare il tuo nome di dominio. App Engine non può eseguire il provisioning di certificati per domini non verificati.

  • Puoi controllare lo stato del tuo certificato con l'API Admin utilizzando una richiesta AuthorizedAuthorizeCertificate.GET.

  • Se non è stato eseguito il provisioning di un certificato gestito perché i record DNS non sono disponibili, il campo ManagedCertificate.ManagementStatus potrebbe essere FAILED_RETRYING_NOT_VISIBLE. Verifica che i record DNS siano aggiornati, attendi qualche minuto e riprova. Può essere necessario attendere fino a 24 ore prima che i record DNS diventino disponibili.

  • Se lo stato è FAILED_PERMANENT, tutti i tentativi di rinnovo non sono andati a buon fine. Controlla le impostazioni DNS, quindi aggiorna la mappatura dei domini personalizzati seguendo i passaggi per aggiornare i certificati SSL gestiti.

Upgrade ai certificati SSL gestiti

Prima di eseguire l'upgrade ai certificati SSL gestiti da Google, tieni presente che i certificati gestiti non supportano le mappature con caratteri jolly.

Se utilizzi sottodomini, esiste un limite di 20 certificati gestiti a settimana per ogni dominio di base. Se raggiungi questo limite, App Engine continua a provare a emettere certificati gestiti finché non vengono soddisfatte tutte le richieste.

Per passare dai tuoi certificati SSL a quelli SSL gestiti da Google o per aggiungere certificati SSL gestiti a un'app esistente con un dominio personalizzato, aggiorna la mappatura dei domini:

  1. In Google Cloud Console, vai ad App Engine > Impostazioni > Domini personalizzati:

    Vai alla pagina Domini personalizzati

  2. Seleziona il dominio da proteggere e fai clic su Abilita sicurezza gestita.

Disabilitazione dei certificati SSL gestiti

Per disattivare i certificati SSL gestiti:

  1. In Google Cloud Console, vai ad App Engine > Impostazioni > Domini personalizzati:

    Vai alla pagina Domini personalizzati

  2. Seleziona il dominio e fai clic su Disattiva la sicurezza gestita.

Utilizzo dei tuoi certificati SSL

Invece di utilizzare certificati SSL gestiti, puoi utilizzare il tuo certificato. Se il tuo certificato non dispone di una Prova di trasparenza, la tua app potrebbe mostrare avvisi SSL in Chrome a causa dell'applicazione della prova di Certificate Transparency. Per ulteriori informazioni sulle conferme di Certificate Transparency e su come rispettarle, consulta la pagina relativa all'applicazione di Certificate Transparency.

Per utilizzare e gestire i tuoi certificati SSL anziché quelli certificati da Google:

  1. Assicurati di avere già configurato il dominio personalizzato nel tuo progetto App Engine.

  2. Disattivare i certificati predefiniti gestiti da Google.

  3. Richiedi un certificato per il tuo dominio all'autorità di certificazione (CA) di tua scelta. La procedura esatta può variare a seconda dell'autorità, ma è consulta la pagina relativa all'acquisizione di un certificato per la procedura standard.

  4. Converti le chiavi private e i file dei certificati SSL in formati supportati da App Engine. Prima di poter caricare i file, la chiave privata deve essere convertita in una chiave privata RSA e i certificati SSL devono essere concatenati in un singolo file. Per ulteriori informazioni, consulta Conversione delle chiavi private e concatenazione dei certificati SSL.

  5. Assicurati di disporre delle autorizzazioni appropriate in Cloud Console e nella proprietà verificata (passaggio 3) di tutti i domini correlati o dei relativi domini principali. Ad esempio:

    • Se il certificato riguarda www.example.com, puoi verificare la proprietà di www.example.com o example.com.
    • Se il certificato riguarda www.example.com e sub.example.com, puoi verificare la proprietà di www.example.com e sub.example.com o di example.com.
    • Se il certificato riguarda *.example.com, devi verificare la proprietà di example.com.
  6. Carica la tua chiave privata e il certificato SSL, quindi mappa il tuo dominio alla tua app:

    1. In Google Cloud Console, vai ad App Engine > Impostazioni > Certificati SSL:

      Vai alla pagina dei certificati SSL

    2. Fai clic su Carica un nuovo certificato.

    3. Carica il certificato SSL concatenato in PEM encoded X.509 public key certificate, ad esempio concat.crt, quindi carica la chiave privata RSA in Chiave privata RSA con codifica PEM non criptata, ad esempio myserver.key.pem.
    4. Fai clic su Carica. Ogni certificato SSL che carichi è visibile e disponibile per tutti gli altri progetti Cloud, in modo da non dover caricare lo stesso certificato ripetutamente.
    5. Seleziona il certificato che vuoi assegnare a un dominio, quindi fai clic su Salva per utilizzare SSL per quel dominio.

  7. Verifica le modifiche visitando il tuo dominio nel browser, utilizzando https, ad esempio, https://www.example.com.

Trasferimento delle mappature da un certificato di gestione a un nuovo certificato

Quando un certificato sta per scadere, devi caricare un nuovo certificato e trasferire le mappature esistenti del certificato al nuovo certificato. La procedura seguente presuppone che il certificato esistente non sia ancora scaduto e che attualmente stia pubblicando il tuo dominio personalizzato.

Per trasferire le mappature da un certificato attivo per la pubblicazione:

  1. Richiedi un nuovo certificato per il tuo dominio all'autorità di certificazione (CA) di tua scelta. Consulta la sezione Ottenere un certificato per i passaggi standard.

  2. Converti le chiavi private e i file dei certificati SSL in formati supportati da App Engine. Per informazioni dettagliate, vedi Convertire le chiavi private e concatenare i certificati SSL.

  3. Carica la tua chiave privata RSA e il certificato SSL concatenato:

    1. Carica il certificato SSL nella pagina dei certificati SSL.

      Vai alla pagina dei certificati SSL
      1. Fai clic su Carica un nuovo certificato.

      2. Carica il tuo certificato SSL concatenato in Certificato con chiave pubblica X.509 con codifica PEM, ad esempio concat.crt, quindi carica la tua chiave privata RSA in Chiave privata RSA con codifica PEM non criptata, ad esempio myserver.key.pem.
      3. Fai clic su Carica.
    2. Seleziona il nuovo certificato appena aggiunto dall'elenco, quindi seleziona il dominio fornito dal vecchio certificato.
    3. Fai clic su Salva per trasferire le mappature dal certificato precedente a quello nuovo.

Recupero di un certificato

La procedura per ottenere un certificato SSL varia a seconda dell'autorità di certificazione che utilizzi. Potrebbe essere necessario modificare leggermente le istruzioni fornite qui. In genere, ogni autorità di certificazione fornisce istruzioni per assisterti durante la procedura.

Per ottenere un certificato da utilizzare con l'app App Engine:

  1. Genera la tua chiave privata e una richiesta di firma del certificato (CSR) utilizzando lo strumento openssl:

    1. Esegui il comando seguente dalla directory in cui vuoi creare il file server.csr:

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

      dove:

      • [MY_PRIVATE_KEY].key è il file generato in cui è archiviata la tua chiave privata. Esempio: myserver.key
      • [MY_CSR].csr è il file generato per la richiesta di firma del certificato. Esempio: server.csr
    2. Quando richiesto, inserisci le seguenti informazioni:

      • Il codice paese di due cifre, ad esempio US per gli Stati Uniti.
      • Il nome della tua città.
      • Il nome della tua azienda. Se non hai un'azienda, puoi utilizzare il tuo nome.
      • La tua unità organizzativa o NA, se non hai questo numero.
      • Un nome comune che rappresenta il tuo dominio, ad esempio: www.example.com
      • Il tuo indirizzo email.

      Non devi fornire altri valori, sono tutti facoltativi.

  2. Determina quale autorità di certificazione funziona, quindi acquista un certificato. Ad esempio, puoi utilizzare: SSLMate, Thawte, Comodo o qualsiasi altra autorità di certificazione.

    Per maggiori dettagli sui tipi di certificati supportati, consulta la pagina relativa all'assistenza di App Engine per i certificati SSL.

  3. Quando la tua CA richiede i contenuti del tuo file CSR, segui le relative istruzioni per copiare e incollare contenuti dal file .csr che hai generato in precedenza, ad esempio server.csr.

  4. Segui le istruzioni quando la tua CA richiede l'approvazione del proprietario del dominio.

    Suggerimento: potresti trovare più semplice utilizzare il metodo di approvazione delle email. Dovrai configurare un indirizzo email nell'account del dominio, ad esempio admin@example.com, in modo da poter ricevere e rispondere alla richiesta di approvazione della CA.

  5. Dopo aver fornito l'approvazione del proprietario del dominio, la CA ti invia il certificato, che in genere è nel formato file .zip. Decomprimi il file in una directory funzionante in modo da poter concatenare i certificati per il caricamento in App Engine.

Conversione di chiavi private e concatenazione di certificati SSL

Devi convertire la tua chiave privata in una chiave privata RSA e concatenare tutti i tuoi certificati SSL, prima di caricare la chiave privata e i certificati SSL su App Engine.

  1. Converti il file della chiave privata generato in precedenza in una chiave privata RSA non criptata. Ad esempio, puoi eseguire il seguente comando openssl rsa:

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

    dove:

    • [MY_PRIVATE_KEY].key è il file generato che contiene la tua chiave privata. Esempio: myserver.key
    • [MY_RSA_KEY].key è il file generato che contiene una chiave privata RSA non criptata. Esempio: myserver.key.pem

      Esempio:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Concatena tutti i file .crt dalla tua CA in un unico file, utilizzando il seguente comando:

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

    dove

    • [MY_DOMAIN_CERT].crt è il certificato per il tuo dominio. Esempio: www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt e [MY_TrustExternalCARoot].crt sono gli altri file di certificato forniti dalla CA.
    • [MY_CONCAT_CERT].crt è il file concatenato che contiene tutti i file dei certificati .crt dalla tua CA. Esempio: concat.crt

      Esempio:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Verifica il tuo certificato SSL e la tua chiave privata:

    1. Per verificare che la chiave privata e il certificato corrispondano, puoi utilizzare i comandi openssl x509 e openssl rsa. Esempi:

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

      Entrambi i comandi openssl x509 e openssl rsa devono restituire lo stesso output.

    2. Per verificare che un certificato e la relativa catena CA siano validi, puoi utilizzare il comando openssl verify. Ad esempio:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Quando è tutto pronto, puoi caricare la tua chiave privata RSA e i certificati concatenati in App Engine.

Supporto di App Engine per i certificati SSL

App Engine supporta i seguenti tipi di certificati:

  • Nome di dominio/nome host singolo
  • Autofirmato
  • Jolly
  • SAN (Subject Alternative Name) / Multi Domain

Sono necessari alcuni elementi dei certificati e delle chiavi:

  • Chiave e certificato privati devono essere caricati in formato PEM.
  • Le chiavi private non devono essere criptate.
  • Un file di certificato può contenere al massimo cinque certificati, che includono certificati concatenati e intermedi.
  • Tutti i nomi degli oggetti nel certificato host devono corrispondere o essere sottodomini dei domini verificati dell'utente.
  • Le chiavi private devono utilizzare la crittografia RSA.
  • Modulo massimo consentito per le chiavi: 2048 bit

Se il certificato host richiede un certificato intermedio o concatenato (numero di autorità di certificazione), dovrai aggiungere i certificati intermedi o concatenati alla fine del file del certificato pubblico.

Alcune funzionalità di App Engine utilizzano sottodomini speciali. Ad esempio, un'applicazione può utilizzare sottodomini per gestire i servizi dell'applicazione o per gestire versioni diverse dell'applicazione. Per utilizzarli con SSL, è consigliabile impostare un certificato SAN o con caratteri jolly. I certificati con caratteri jolly supportano solo un livello di sottodominio.

Rimozione dei certificati SSL personalizzati

Per interrompere l'utilizzo di un certificato SSL personalizzato, segui questi passaggi:

  1. In Cloud Console, vai alla pagina delle impostazioni dei certificati SSL di App Engine.

    Vai alle impostazioni del certificato SSL

  2. Fai clic sul certificato che vuoi rimuovere dal tuo dominio.

  3. Deseleziona il nome di dominio per il quale non vuoi più utilizzare il certificato SSL, quindi fai clic su Salva.

Utilizzo delle intestazioni Strict-Transport-Security

Per motivi di sicurezza, tutte le applicazioni devono incoraggiare i client a utilizzare le connessioni https. Per indicare al browser di preferire https rispetto a http, utilizza l'intestazione Strict-Transport-Security.

Visualizzazione delle versioni TLS e degli algoritmi di crittografia abilitati

  1. Se non è già disponibile, installa nmap Mapper di rete sul tuo computer. Per istruzioni di installazione, visita la pagina https://nmap.org/.

  2. Per vedere quali versioni e algoritmi di crittografia TLS sono abilitate per la tua app, inserisci il seguente comando:

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

    Sostituisci hostname con il nome host della tua app. Puoi utilizzare il tuo dominio personalizzato o il nome host appspot.com creato da App Engine per la tua app. Ad esempio:

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

Disattivazione delle versioni e delle crittografie TLS

Se utilizzi Cloud Load Balancing e NEGS serverless per indirizzare il traffico verso la tua app App Engine, puoi disattivare una versione o una crittografia TLS definendo un criterio di sicurezza SSL che specifica quali versioni e algoritmi di crittografia TLS possono essere utilizzati per le connessioni HTTPS o SSL.