Questa pagina fornisce istruzioni per configurare mTLS del backend utilizzando certificati autogestiti per i bilanciatori del carico delle applicazioni esterni globali.
I passaggi per configurare mTLS del backend sono simili a quelli per la TLS autenticata dal backend, tranne per il fatto che devi anche creare un certificato per il bilanciatore del carico. Questo certificato, noto anche come certificato client, è allegato alla risorsa Configurazione autenticazione backend. Il bilanciatore del carico utilizza questo certificato client per autenticarsi nei backend.
Per configurare mTLS backend, completa i passaggi nelle sezioni seguenti:
- Crea una risorsa di configurazione dell'attendibilità costituita da certificati radice e intermedi.
- Crea un certificato client e caricalo in Certificate Manager.
- Crea una risorsa di configurazione dell'autenticazione del backend che faccia riferimento sia alla configurazione dell'attendibilità sia al certificato client.
- Collega la risorsa di configurazione dell'autenticazione del backend al servizio di backend del bilanciatore del carico.
Prima di iniziare
- Consulta la panoramica di TLS autenticato dal backend e mTLS del backend.
- Esamina Gestire le configurazioni di attendibilità.
Se vuoi seguire le istruzioni di questa guida utilizzando Google Cloud CLI, devi installarla. Puoi trovare i comandi relativi al bilanciamento del carico nei riferimenti all'API e a gcloud CLI.
Se non hai mai eseguito gcloud CLI, esegui prima il comando
gcloud init
per l'autenticazione.Abilita le seguenti API: API Compute Engine, API Certificate Manager, API Network Security e API Network Services. Per saperne di più, vedi Abilitazione delle API.
Configura un bilanciatore del carico delle applicazioni esterno globale con uno dei seguenti backend supportati:
- Backend di gruppi di istanze VM
- NEG di connettività ibrida
- NEG a livello di zona
Autorizzazioni
Questa sezione elenca le autorizzazioni necessarie per configurare mTLS di backend.Operazione | Autorizzazione |
---|---|
Crea una configurazione dell'attendibilità | certificatemanager.trustconfigs.create sulla destinazione
Google Cloud progetto |
Crea un certificato client | certificatemanager.certs.create sulla destinazione
Google Cloud progetto |
Crea una risorsa di configurazione dell'autenticazione del backend |
certificatemanager.certs.use sul certificato di destinazionecertificatemanager.trustconfigs.use nella configurazione dell'attendibilità di destinazionenetworksecurity.backendauthenticationconfigs.create sul
progetto Google Cloud di destinazione |
Collega la risorsa di configurazione dell'autenticazione del backend al servizio di backend del bilanciatore del carico |
compute.backendservice.update sul servizio di backend di destinazionenetworksecurity.backendauthenticationconfigs.use nella
risorsa di configurazione dell'autenticazione del backend di destinazione |
Panoramica della configurazione
Le sezioni seguenti descrivono i passaggi per configurare mTLS di backend in base all'architettura mostrata nel seguente diagramma:
Crea i certificati radice e intermedi
Questa sezione utilizza la libreria OpenSSL per creare il certificato radice (ancora di attendibilità) e il certificato intermedio.
Un certificato radice si trova in cima alla catena di certificati. Un certificato intermedio fa parte della catena di attendibilità che porta al certificato radice. Il certificato intermedio è firmato crittograficamente dal certificato radice. Quando il bilanciatore del carico riceve un certificato server, lo convalida stabilendo una catena di attendibilità dal certificato server al trust anchor configurato.
Utilizza i seguenti comandi per creare i certificati radice e intermedi.
Crea un file di configurazione OpenSSL.
Nell'esempio seguente, il file di configurazione (
example.cnf
) contiene la sezione[ca_exts]
, che specifica le estensioni X.509 che contrassegnano il certificato come adatto a una CA. Per scoprire di più sui requisiti per i certificati root e intermedi, consulta Requisiti dei certificati.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=serverAuth EOF
Crea un certificato radice X.509 autofirmato (
root.cert
). Il certificato radice è autofirmato con la propria chiave privata (root.key
).openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Crea la richiesta di firma del certificato (CSR)
int.req
per il certificato intermedio.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Firma la CSR per creare il certificato intermedio X.509 (
int.cert
). La CSR viene firmata utilizzando il certificato radice.openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
Formattare i certificati
Per includere certificati nuovi o esistenti in un archivio di attendibilità, formatta i certificati in una singola riga e archiviali nelle variabili di ambiente in modo che possano essere referenziati dal file YAML di configurazione dell'attendibilità.
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Crea una risorsa di configurazione dell'attendibilità
Una configurazione di attendibilità è una risorsa che rappresenta la configurazione dell'infrastruttura a chiave pubblica (PKI) in Gestore certificati.
Per creare una risorsa di configurazione dell'attendibilità, completa i seguenti passaggi:
Console
Nella console Google Cloud , vai alla pagina Certificate Manager.
Nella scheda Configurazioni di attendibilità, fai clic su Aggiungi configurazione di attendibilità.
Inserisci un nome per la configurazione.
Per Località, seleziona Globale. La località indica dove è archiviata la risorsa di configurazione dell'attendibilità. Per i bilanciatori del carico delle applicazioni esterni globali, devi creare una risorsa di configurazione dell'attendibilità globale.
Nella sezione Archivio di attendibilità, fai clic su Aggiungi ancoraggio attendibilità e carica il file del certificato con codifica PEM o copia i contenuti del certificato.
Fai clic su Aggiungi.
Nella sezione Trust store, fai clic su Aggiungi CA intermedia e carica il file del certificato con codifica PEM o copia i contenuti del certificato. Questo passaggio ti consente di aggiungere un altro livello di attendibilità tra il certificato radice e il certificato del server.
Fai clic su Aggiungi per aggiungere la CA intermedia.
Per aggiungere il certificato che hai aggiunto alla lista consentita, fai clic su Aggiungi.
Fai clic su Crea.
Verifica che la nuova risorsa di configurazione dell'attendibilità venga visualizzata nell'elenco delle configurazioni.
gcloud
Crea un file YAML di configurazione dell'attendibilità (
trust_config.yaml
) che specifica i parametri di configurazione dell'attendibilità. Questa risorsa di configurazione dell'attendibilità di esempio contiene un archivio di attendibilità con un trust anchor e un certificato intermedio. Questa risorsa di configurazione dell'attendibilità legge il contenuto del certificato dalle variabili di ambiente create nel passaggio precedente Formatta i certificati.cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT}" EOF
Per creare un trust store con trust anchor o certificati intermedi aggiuntivi, aggiungi righe
pemCertificate
nella sezione appropriata.Per importare il file YAML di configurazione dell'attendibilità, utilizza il comando
gcloud certificate-manager trust-configs import
:Per i bilanciatori del carico delle applicazioni esterni globali, specifica
global
come posizione in cui è archiviata la risorsa di configurazione dell'attendibilità.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
Sostituisci quanto segue:
TRUST_CONFIG_NAME
: il nome della risorsa di configurazione dell'attendibilità
Crea un certificato client
In mTLS del backend, il bilanciatore del carico funge da client e il backend da server.
Per abilitare mTLS di backend, il bilanciatore del carico deve dimostrare la propria identità al backend. Questa autenticazione viene eseguita utilizzando un certificato client che il bilanciatore del carico presenta al backend. Il server di backend deve convalidare il certificato client utilizzando la propria catena di attendibilità.
Quando si connette a un server di backend, il bilanciatore del carico imposta l'indicazione nome server (SNI) sul nome host specificato nella configurazione TLS. Il server di backend seleziona il certificato SSL/TLS appropriato in base a questo valore SNI. Il bilanciatore del carico prevede che il valore SNI corrisponda a un nome alternativo del soggetto (SAN) elencato nel certificato del server di backend.
I certificati client possono essere certificati gestiti da una CA privata tramite Certificate Authority Service o certificati PKI privati autogestiti. In questo esempio, il certificato client viene emesso utilizzando certificati autogestiti. Questa sezione utilizza la libreria OpenSSL per creare il certificato CA radice e il certificato client.
Per creare un certificato client:
Crea un file di configurazione OpenSSL.
Nell'esempio seguente, il file di configurazione (
example.cnf
) contiene la sezione[ca_exts]
, che specifica le estensioni X.509 che contrassegnano il certificato come adatto a un'autorità di certificazione (CA). L'attributoextendedKeyUsage
è impostato suclientAuth
. Per scoprire di più sui requisiti per i certificati root e intermedi, consulta la sezione Requisiti dei certificati.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Crea un certificato CA radice X.509 autofirmato (
root.cert
). Il certificato radice è autofirmato con la propria chiave privata (root.key
).openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Crea un file di configurazione per generare la CSR per il certificato client.
Il seguente file di configurazione (
client.config
) contiene la sezione[extension_requirements]
, che specifica le estensioni X.509 da includere nella CSR. Per scoprire di più sui requisiti per i certificati client, consulta Requisiti dei certificati.cat > client.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOF
Crea la CSR (
client.csr
) per il certificato client.openssl req -new \ -config client.config \ -keyout client.key -out client.csr
Crea il certificato client (
client.cert
) dalla CSR. La CSR è firmata dal certificato CA radice per emettere il certificato client X.509.openssl x509 -req \ -CAkey root.key -CA root.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
Carica il certificato client in Certificate Manager
Per caricare il certificato client in Certificate Manager, completa i seguenti passaggi:
Console
Nella console Google Cloud , vai alla pagina Certificate Manager.
Nella scheda Certificati, fai clic su Aggiungi certificato.
Inserisci un nome per il certificato.
Questo nome deve essere univoco per il progetto.
(Facoltativo) Inserisci una descrizione per il certificato. La descrizione ti aiuta a identificare un certificato specifico in un secondo momento.
Per Località, seleziona Globale.
In Ambito, seleziona Autenticazione client.
In Tipo di certificato, scegli Crea certificato autogestito.
Per il campo Certificato, carica un file del certificato con codifica PEM oppure copia e incolla i contenuti di un certificato con codifica PEM.
Per il campo Certificato di chiave privata, carica una chiave privata con codifica PEM non protetta da una passphrase oppure copia e incolla i contenuti della chiave privata con codifica PEM.
Specifica un'etichetta da associare al certificato. Se necessario, puoi aggiungere più di un'etichetta. Per aggiungere un'etichetta, fai clic sul pulsante
Aggiungi etichetta e specifica unkey
e unvalue
per l'etichetta.Fai clic su Crea. Verifica che il nuovo certificato venga visualizzato nell'elenco dei certificati.
gcloud
Per caricare il certificato client in Certificate Manager, utilizza il comando
gcloud certificate-manager certificates create
. L'ambito di questo certificato èclient-auth
, il che indica che questo certificato viene utilizzato come certificato client in mTLS di backend.gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \ --certificate-file=client.cert \ --private-key-file=client.key \ --scope=client-auth \ --global
Sostituisci quanto segue:
CLIENT_CERTIFICATE_NAME
: il nome della risorsa del certificato client. Questo certificato client con l'ambitoclient-auth
viene utilizzato dalla risorsa di configurazione dell'autenticazione del backend.
Crea una risorsa di configurazione dell'autenticazione del backend
Per creare una risorsa di configurazione dell'autenticazione del backend (BackendAuthenticationConfig
),
completa i seguenti passaggi.
Console
- Nella console Google Cloud , vai alla pagina Configurazione dell'autenticazione.
- Nella scheda Autenticazione backend, fai clic su Crea.
- Inserisci un nome per la risorsa di configurazione dell'autenticazione del backend.
- Seleziona la risorsa del certificato client che hai creato in precedenza.
- (Facoltativo) Seleziona le radici di attendibilità pubbliche.
- Seleziona la risorsa di configurazione di attendibilità che hai creato in precedenza.
- Fai clic su Crea.
Verifica che venga visualizzata la risorsa di configurazione dell'autenticazione del backend.
gcloud
Crea un file YAML che specifica in modo dichiarativo i diversi attributi della risorsa di configurazione di autenticazione del backend.
Collega il certificato client alla risorsa di configurazione dell'autenticazione del backend per abilitare mTLS del backend.
cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_NAME wellKnownRoots: PUBLIC_ROOTS EOF
Sostituisci quanto segue:
BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: il nome del file YAML in cui è definita la risorsa di configurazione di autenticazione del backend.PROJECT_ID
: l'ID del tuo Google Cloud progettoBACKEND_AUTH_CONFIG_NAME
: il nome della risorsa di configurazione dell'autenticazione del backendTRUST_CONFIG_NAME
: il nome della risorsa di configurazione dell'attendibilità creata in precedenza.CLIENT_CERTIFICATE_NAME
: il nome della risorsa del certificato client che hai creato in precedenza.
Per importare la risorsa di configurazione dell'autenticazione del backend, utilizza il comando
gcloud network-security backend-authentication-configs import
:gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \ --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \ --location=global
Sostituisci quanto segue:
BACKEND_AUTH_CONFIG_NAME
: il nome della risorsa di configurazione dell'autenticazione del backendBACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: il nome del file YAML in cui è definita la risorsa di configurazione di autenticazione del backend.
Collega la risorsa di configurazione dell'autenticazione del backend al servizio di backend del bilanciatore del carico
Per collegare la risorsa di configurazione dell'autenticazione del backend (BackendAuthenticationConfig
)
al servizio di backend del bilanciatore del carico, completa i seguenti
passaggi.
Console
Nella console Google Cloud , vai alla pagina Bilanciamento del carico.
Nella scheda Backend, seleziona il servizio di backend per il quale devi abilitare TLS autenticato del backend e mTLS del backend.
Fai clic su
Modifica.Espandi la sezione Configurazioni avanzate.
Nella sezione Autenticazione backend, seleziona la casella di controllo Attiva.
(Facoltativo) Specifica il nome host SNI e i SAN accettati per convalidare il certificato di backend.
Per collegare la risorsa di configurazione dell'autenticazione del backend al servizio di backend, seleziona la risorsa di configurazione dell'autenticazione del backend nell'elenco Configurazione dell'autenticazione del backend.
Fai clic su Continua.
Per aggiornare le impostazioni del servizio di backend, fai clic su Aggiorna.
gcloud
Per elencare tutte le risorse del servizio di backend nel tuo progetto, utilizza il comando
gcloud compute backend-services list
.gcloud compute backend-services list
Prendi nota del nome del servizio di backend a cui collegare la risorsa
BackendAuthenticationConfig
. Questo nome viene indicato comeBACKEND_SERVICE_NAME
nei passaggi seguenti.Per esportare la configurazione del servizio di backend in un file, utilizza il comando
gcloud beta compute backend-services export
.gcloud beta compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_FILENAME.yaml \ --global
Sostituisci quanto segue:
BACKEND_SERVICE_NAME
: il nome del servizio di backendBACKEND_SERVICE_FILENAME
: il nome e il percorso di un file YAML in cui viene esportata la configurazione del servizio di backend
Aggiorna l'attributo
tlsSettings
del servizio di backend, indirizzandolo alla risorsa di configurazione dell'autenticazione del backend. Inoltre, puoi configurare il nome host SNI e i SAN accettati nel servizio di backend per convalidare il certificato di backend.cat << EOF >> BACKEND_SERVICE_FILENAME.yaml tlsSettings: authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME sni: examplepetstore.com subjectAltNames: - dnsName: examplepetstore.com - dnsName: api.examplepetstore.com EOF
I valori SNI e SAN nella dichiarazione YAML precedente sono intesi solo come esempi. Puoi sostituirli con valori reali pertinenti alla tua configurazione.
Sostituisci quanto segue:
BACKEND_SERVICE_FILENAME
: il nome del file YAML in cui viene esportata la configurazione del servizio di backendPROJECT_ID
: l'ID del tuo progetto Google CloudBACKEND_AUTH_CONFIG_NAME
: il nome della risorsa di configurazione dell'autenticazione del backend
Per importare la configurazione aggiornata del servizio di backend da un file, utilizza il comando
gcloud beta compute backend-services import
.gcloud beta compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_FILENAME.yaml \ --global
Sostituisci quanto segue:
BACKEND_SERVICE_NAME
: il nome del servizio di backendBACKEND_SERVICE_FILENAME
: il nome del file YAML di configurazione del servizio di backend
Crea un certificato server di backend
Questa sezione fornisce un'opzione di configurazione aggiuntiva per creare un certificato server (foglia) firmato dal certificato intermedio, che fa parte della configurazione di attendibilità. In questo modo, è possibile stabilire una catena di attendibilità dal certificato del server al trust anchor.
Se hai già creato una risorsa di configurazione dell'attendibilità che contiene un certificato intermedio, procedi nel seguente modo:
Crea un file di configurazione per generare la CSR per il certificato server.
Il seguente file di configurazione (
server.config
) contiene la sezione[extension_requirements]
, che specifica le estensioni X.509 da includere nella CSR. Per scoprire di più sui requisiti per i certificati server, consulta Requisiti dei certificati.cat > server.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = examplepetstore.com DNS.2 = api.examplepetstore.com [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = examplepetstore.com emailAddress = test@examplepetstore.com EOF
Crea la CSR (
server.csr
) per il certificato server.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -config server.config \ -keyout server.key -out server.csr
Firma la CSR per emettere il certificato server X.509 (
server.cert
). La CSR è firmata dal certificato intermedio.openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile server.config \ -extensions extension_requirements \ -in server.csr -out server.cert
Quando il bilanciatore del carico si connette al server di backend, quest'ultimo presenta il proprio certificato (
server.cert
) per autenticarsi con il bilanciatore del carico, completando la procedura di autenticazione backend.
Opzioni di configurazione SSL aggiuntive su un server web Apache
Questa sezione facoltativa descrive la procedura per aggiornare le opzioni di configurazione SSL su un server Apache in base ai certificati client e server creati in precedenza.-
Copia la chiave privata del server (
server.key
) e il certificato del server (server.cert
) nel server web Apache.cat > server.key << EOF -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- EOF sudo cp ./server.key /etc/ssl/private/server.key
Sostituisci
[...]
con la chiave privata del server con codifica PEM che hai creato in precedenza.cat > server.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./server.cert /etc/ssl/certs/server.cert
Sostituisci
[...]
con il certificato del server con codifica PEM che hai creato in precedenza. -
Carica il certificato client nella configurazione di attendibilità del server per convalidarlo.
cat > client.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./client.cert /etc/ssl/certs/client.cert
Sostituisci [...] con il certificato client codificato in formato PEM che hai creato in precedenza.
-
Aggiorna la configurazione SSL del server web Apache.
Aggiorna la configurazione SSL di Apache per abilitare il traffico HTTPS utilizzando il certificato SSL e la chiave privata specificati.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLCertificateFile /etc/ssl/certs/server.cert SSLCertificateKeyFile /etc/ssl/private/server.key ----
Aggiorna la configurazione SSL di Apache in modo che richieda l'autenticazione del certificato client e specifica il certificato CA per la convalida.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile /etc/ssl/certs/client.cert ----
-
Ricalcola l'hash dei certificati CA.
sudo c_rehash /etc/ssl/certs/
-
Riavvia il server web Apache per applicare le modifiche.
sudo systemctl restart apache2.service