Questa pagina fornisce le istruzioni per creare un certificato radice e un certificato intermedio firmato e per poi caricarli in una risorsa TrustConfig
del Gestore certificati. Se hai già dei certificati da caricare, salta i passaggi per crearne di nuovi.
Creerai inoltre le risorse di sicurezza di rete necessarie per configurare il protocollo TLS (mTLS) per i bilanciatori del carico delle applicazioni. Le istruzioni utilizzano OpenSSL per creare i certificati radice e intermedi.
Prima di iniziare
- Consulta la panoramica sul protocollo TLS reciproco.
- Esamina la sezione Gestire le configurazioni di attendibilità.
Installa Google Cloud CLI. Per una panoramica completa dello strumento, vedi la panoramica dell'interfaccia a riga di comando gcloud. Puoi trovare i comandi relativi al bilanciamento del carico nel riferimento API e gcloud CLI.
Se non hai già eseguito gcloud CLI, esegui prima il comando
gcloud init
per l'autenticazione.Abilita API: API Compute Engine, API Certificate Manager, API Network Security e API Network Services.
Imposta il progetto.
gcloud
gcloud config set project PROJECT_ID
Autorizzazioni
Per ottenere le autorizzazioni necessarie per completare questa guida, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:
-
Per creare risorse del bilanciatore del carico, ad esempio
TargetHTTPSProxy
: Amministratore bilanciatore del carico Compute (roles/compute.loadBalancerAdmin
) -
Per utilizzare le risorse di Gestore certificati:
Proprietario Gestore certificati (
roles/certificatemanager.owner
) -
Per creare componenti di sicurezza e networking:
Amministratore rete Compute (
roles/compute.networkAdmin
) e Amministratore sicurezza Compute (roles/compute.securityAdmin
) -
(Facoltativo) Per creare un progetto:
Autore progetto (
roles/resourcemanager.projectCreator
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Genera una chiave e dei certificati firmati
Questa sezione utilizza i comandi openssl
per creare certificati radice e intermedi.
Usa i comandi seguenti per generare un certificato radice e un certificato intermedio firmato con campi keyUsage
e extendedKeyUsage
validi.
Crea un file
example.cnf
di esempio con la configurazione minima richiesta per creare certificati di firma validi. Puoi modificare questo file se vuoi impostare campi aggiuntivi su questi certificati.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command line arg. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Crea il certificato radice.
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 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
Crea il certificato intermedio.
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
Genera un certificato e aggiungilo a una lista consentita
Questa sezione utilizza i comandi openssl
per creare un certificato di esempio e aggiungerlo a una lista consentita.
Utilizza i comandi seguenti per generare un certificato e aggiungerlo a una lista consentita.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
Formattare i certificati
Per includere certificati nuovi o esistenti in un elemento TrustStore
, formattali in un'unica riga e archiviali in variabili di ambiente, in modo che possano essere letti nel file YAML. Utilizza i seguenti comandi per formattare i certificati e archiviarli nelle variabili di ambiente:
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')
Per includere certificati nuovi o esistenti aggiunti a una lista consentita in una configurazione di attendibilità, formatta i certificati in un'unica riga e archiviali in variabili di ambiente, in modo che possano essere letti nel file YAML. Per i certificati che si trovano in una lista consentita, utilizza il comando seguente per formattare i certificati in un'unica riga e archiviarli nella variabile di ambiente ALLOWLISTED_CERT
.
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Crea una risorsa TrustConfig
Crea una risorsa TrustConfig
del gestore certificati
che rappresenti la tua infrastruttura a chiave pubblica. Questa risorsa TrustConfig
di esempio contiene un archivio di attendibilità con due trust anchor e due certificati CA intermedi.
Legge il contenuto del certificato dalle variabili di ambiente create nel precedente passaggio Formattare i certificati.
Per creare un archivio di attendibilità con altri trust anchor o certificati CA intermedi, aggiungi pemCertificate
righe nella sezione appropriata. Se hai meno di trust anchor o certificati CA intermedi, rimuovi le righe non necessarie.
Questa risorsa TrustConfig
di esempio contiene un certificato che viene aggiunto a una lista consentita. Puoi specificare più certificati in una lista consentita utilizzando più istanze del campo pemCertificate
.
Nei passaggi seguenti, sostituisci TRUST_CONFIG_NAME
con il nome della risorsa TrustConfig
:
Per creare il file
trust_config.yaml
con un archivio di attendibilità, utilizza il seguente comando:cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" - pemCertificate: "${ROOT_CERT_2?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" - pemCertificate: "${INTERMEDIATE_CERT_2?}" EOF
(Facoltativo) Per creare il file
trust_config.yaml
con un certificato che viene aggiunto a una lista consentita, utilizza il seguente comando:cat << EOF > trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Per creare le risorse
TrustConfig
del gestore certificati, utilizza il comandogcloud certificate-manager trust-configs import
:globale
Per bilanciatori del carico delle applicazioni esterni e Application Load Balancer interni tra regioni, utilizza questo comando:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml
regionale
Per gli Application Load Balancer esterni regionali e gli Application Load Balancer interni regionali, utilizza questo comando:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=REGION
crea le risorse di sicurezza della rete
Un criterio TLS del server (risorsa di sicurezza di rete ServerTLSPolicy
) consente di specificare la modalità TLS lato server e la risorsa TrustConfig
da utilizzare durante la convalida dei certificati client. Quando il client presenta un certificato non valido o nessun certificato al bilanciatore del carico, clientValidationMode
specifica come viene gestita la connessione client.
- Se
clientValidationMode
è impostato suALLOW_INVALID_OR_MISSING_CLIENT_CERT
, tutte le richieste vengono passate al backend anche se la convalida non va a buon fine o il certificato client è mancante. - Quando
clientValidationMode
è impostato suREJECT_INVALID
, solo le richieste che forniscono un certificato client che può essere convalidato a fronte di una risorsaTrustConfig
vengono passate al backend.
Per creare la risorsa ServerTLSPolicy
, completa i seguenti passaggi:
A seconda di come vuoi gestire la connessione, seleziona una delle seguenti opzioni.
Nei passaggi seguenti, sostituisci
SERVER_TLS_POLICY_NAME
con il nome del criterio TLS del server ePROJECT_ID
con l'ID del tuo progetto Google Cloud.Opzione 1:
clientValidationMode
è impostata suALLOW_INVALID_OR_MISSING_CLIENT_CERT
.Per creare il file
server_tls_policy.yaml
, utilizza il comando seguente:globale
Per bilanciatori del carico delle applicazioni esterni e Application Load Balancer interni tra regioni, utilizza il comando:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regionale
Per gli Application Load Balancer esterni regionali e gli Application Load Balancer interni regionali, utilizza il comando:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Opzione 2:
clientValidationMode
è impostata suREJECT_INVALID
.Per creare il file
server_tls_policy.yaml
, utilizza il comando seguente:globale
Per bilanciatori del carico delle applicazioni esterni e Application Load Balancer interni tra regioni, utilizza il comando:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regionale
Per gli Application Load Balancer esterni regionali e gli Application Load Balancer interni regionali, utilizza il comando:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Per creare la risorsa
ServerTlsPolicy
, utilizza il comandogcloud network-security server-tls-policies import
:globale
Per bilanciatori del carico delle applicazioni esterni e Application Load Balancer interni tra regioni, utilizza il comando:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
regionale
Per gli Application Load Balancer esterni regionali e gli Application Load Balancer interni regionali, utilizza il comando:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
Per maggiori informazioni, consulta Modalità di convalida del client MTLS.
Firma una chiave client con il certificato intermedio
Questa sezione fornisce un'opzione di configurazione aggiuntiva per generare un certificato foglia.
Se hai già creato una risorsa TrustConfig utilizzando i certificati intermedi (int.cert
e int.key
), utilizza le seguenti istruzioni:
Creare un file di configurazione della chiave client.
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
Se vuoi avere un'identità SPIFFE collegata:
Aggiungi un elemento
subjectAltName
alla sezione[extension_requirements]
come segue:subjectAltName = @sans_list
Aggiungi una nuova sezione alla fine del file
client.config
con quanto segue:[sans_list] URI.1 = spiffe://example.com/test-identity
Firma la chiave.
openssl req -new -keyout client.key -out client.csr -config client.config openssl x509 -req -in client.csr -out client.cert -extfile client.config -extensions extension_requirements -days 365 -CA int.cert -CAkey int.key
Per eseguire il test, invia una richiesta
curl
all'indirizzo IP del bilanciatore del carico.curl -v -k --key client.key --cert client.cert https://IP_ADDRESS
Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico.
Passaggi successivi
- Configurare il protocollo TLS comune per un bilanciatore del carico delle applicazioni esterno globale
- Configurare il protocollo TLS comune per un bilanciatore del carico delle applicazioni classico
- Configura il protocollo TLS reciproca per un bilanciatore del carico delle applicazioni interno
- Configura il protocollo TLS reciproca per un bilanciatore del carico delle applicazioni esterno regionale
- Configurare il protocollo TLS reciproca con una CA privata