Auf dieser Seite finden Sie eine Anleitung zum Erstellen eines Root-Zertifikats und eines signierten Zwischenzertifikats sowie zum Hochladen dieser Zertifikate in eine TrustConfig
-Ressource von Zertifikatmanager. Wenn Sie vorhandene Zertifikate hochladen möchten, überspringen Sie die folgenden Schritte zum Erstellen neuer Zertifikate.
Sie erstellen auch die Netzwerksicherheitsressourcen, die zum Konfigurieren von gegenseitigem TLS (mTLS) für Application Load Balancer erforderlich sind. In der Anleitung werden OpenSSL verwendet, um die Root- und Zwischenzertifikate zu erstellen.
Hinweis
- Lesen Sie die Übersicht zu gegenseitigem TLS.
- Weitere Informationen finden Sie unter Vertrauenskonfigurationen verwalten.
Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie im Leitfaden zur gcloud CLI. Befehle für das Load-Balancing finden Sie in der Referenz für die API und gcloud CLI.
Wenn Sie die gcloud CLI noch nicht ausgeführt haben, führen Sie zuerst den Befehl
gcloud init
zur Authentifizierung aus.APIs aktivieren: Compute Engine API, Certificate Manager API, Network Security und Network Services API.
Projekt festlegen
gcloud
gcloud config set project PROJECT_ID
Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:
- Zum Erstellen von Load-Balancer-Ressourcen wie
TargetHTTPSProxy
: Compute Load Balancer Admin (roles/compute.loadBalancerAdmin
) - So verwenden Sie Zertifikatmanager-Ressourcen:
Zertifikatmanager-Inhaber (
roles/certificatemanager.owner
) -
So erstellen Sie Sicherheits- und Netzwerkkomponenten: Compute-Netzwerkadministrator (
roles/compute.networkAdmin
) und Compute-Sicherheitsadministrator (roles/compute.securityAdmin
) - Zum Erstellen eines Projekts (optional):
Project Creator (
roles/resourcemanager.projectCreator
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Schlüssel und signierte Zertifikate generieren
In diesem Abschnitt werden openssl
-Befehle verwendet, um Root- und Zwischenzertifikate zu erstellen.
Verwenden Sie die folgenden Befehle, um ein Root-Zertifikat und ein signiertes Zwischenzertifikat mit gültigen Feldern keyUsage
und extendedKeyUsage
zu generieren.
Erstellen Sie eine
example.cnf
-Beispieldatei mit der Mindestkonfiguration, die zum Erstellen gültiger Signaturzertifikate erforderlich ist. Sie können diese Datei bearbeiten, wenn Sie zusätzliche Felder für diese Zertifikate festlegen möchten.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
Erstellen Sie das Root-Zertifikat.
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
Erstellen Sie die Signaturanfrage für das Zwischenzertifikat.
openssl req \ -new -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Erstellen Sie das Zwischenzertifikat.
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
Zertifikat auf der Zulassungsliste generieren
In diesem Abschnitt werden openssl
-Befehle verwendet, um ein Beispielzertifikat für ein Zertifikat zu erstellen.
Verwenden Sie die folgenden Befehle, um ein Zertifikat auf der Zulassungsliste zu generieren.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
Zertifikate formatieren
Wenn Sie neue oder vorhandene Zertifikate in einen TrustStore
aufnehmen möchten, formatieren Sie die Zertifikate in einer einzelnen Zeile und speichern Sie sie in Umgebungsvariablen, damit sie in die YAML-Datei gelesen werden können. Verwenden Sie die folgenden Befehle, um die Zertifikate zu formatieren und in Umgebungsvariablen zu speichern:
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')
Wenn Sie neue oder vorhandene Zertifikate auf der Zulassungsliste in eine Trust-Konfiguration aufnehmen möchten, formatieren Sie die Zertifikate in einer einzelnen Zeile und speichern Sie sie in Umgebungsvariablen, damit sie in die YAML-Datei gelesen werden können. Verwenden Sie die folgenden Befehle, um die Zertifikate auf der Zulassungsliste zu formatieren und in Umgebungsvariablen zu speichern:
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
TrustConfig-Ressource erstellen
Erstellen Sie eine Zertifikatmanager-TrustConfig
-Ressource, die Ihre PKI darstellt. Diese TrustConfig
-Beispielressource enthält einen Trust Store mit zwei Trust-Anchors und zwei Zwischen-CA-Zertifikaten.
Der Zertifikatsinhalt wird aus den Umgebungsvariablen gelesen, die im vorherigen Schritt Zertifikate formatieren erstellt wurden.
Fügen Sie im entsprechenden Abschnitt pemCertificate
-Zeilen hinzu, um einen Trust Store mit zusätzlichen Trust-Anchors oder Zwischen-CA-Zertifikaten zu erstellen. Wenn Sie weniger Trust-Anchors oder Zwischen-CA-Zertifikate haben, entfernen Sie die nicht benötigten Zeilen.
Diese TrustConfig
-Beispielressource enthält ein Zertifikat auf der Zulassungsliste.
Sie können mehrere Zertifikate auf der Zulassungsliste angeben, indem Sie mehrere Instanzen des Felds pemCertificate
verwenden.
Ersetzen Sie in den folgenden Schritten TRUST_CONFIG_NAME
durch den Namen der TrustConfig
-Ressource:
Verwenden Sie den folgenden Befehl, um die Datei
trust_config.yaml
mit einem Trust Store zu erstellen:cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" - pemCertificate: "${ROOT_CERT_2?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" - pemCertificate: "${INTERMEDIATE_CERT_2?}" EOF
Optional: Verwenden Sie den folgenden Befehl, um die Datei
trust_config.yaml
mit einem Zertifikat auf der Zulassungsliste zu erstellen:cat << EOF > trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Verwenden Sie zum Erstellen der Certificate Manager-
TrustConfig
-Ressourcen den Befehlgcloud certificate-manager trust-configs import
:global
Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml
regional
Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=REGION
Ressourcen für die Netzwerksicherheit erstellen
Mit einer Server-TLS-Richtlinie (Netzwerksicherheitsressource ServerTLSPolicy
) können Sie den serverseitigen TLS-Modus und die Ressource TrustConfig
angeben, die bei der Validierung von Clientzertifikaten verwendet werden sollen. Wenn der Client dem Load-Balancer ein ungültiges oder kein Zertifikat übergibt, gibt der clientValidationMode
an, wie die Clientverbindung verarbeitet wird.
- Wenn
clientValidationMode
aufALLOW_INVALID_OR_MISSING_CLIENT_CERT
gesetzt ist, werden alle Anfragen an das Backend übergeben, auch wenn die Validierung fehlschlägt oder das Clientzertifikat fehlt. - Wenn
clientValidationMode
aufREJECT_INVALID
gesetzt ist, werden nur Anfragen an das Backend weitergeleitet, die ein Clientzertifikat bereitstellen, das mit einerTrustConfig
-Ressource validiert werden kann.
Führen Sie die folgenden Schritte aus, um die Ressource ServerTLSPolicy
zu erstellen:
Wählen Sie je nachdem, wie Sie die Verbindung verarbeiten möchten, eine der folgenden Optionen aus.
Ersetzen Sie in den folgenden Schritten
SERVER_TLS_POLICY_NAME
durch den Namen der Server-TLS-Richtlinie undPROJECT_ID
durch die ID Ihres Google Cloud-Projekts.Option 1:
clientValidationMode
ist aufALLOW_INVALID_OR_MISSING_CLIENT_CERT
festgelegt.Erstellen Sie mit dem folgenden Befehl die Datei
server_tls_policy.yaml
:global
Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:
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
regional
Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:
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
Option 2:
clientValidationMode
ist aufREJECT_INVALID
festgelegt.Erstellen Sie mit dem folgenden Befehl die Datei
server_tls_policy.yaml
:global
Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:
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
regional
Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:
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
Verwenden Sie den Befehl
gcloud network-security server-tls-policies import
, um die RessourceServerTlsPolicy
zu erstellen.global
Verwenden Sie für externe Application Load Balancer und regionenübergreifende interne Application Load Balancer den folgenden Befehl:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
regional
Verwenden Sie für regionale externe Application Load Balancer und regionale interne Application Load Balancer den folgenden Befehl:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
Weitere Informationen finden Sie unter Validierungsmodi für MTLS-Clients.
Clientschlüssel mit dem Zwischenzertifikat signieren
Dieser Abschnitt bietet eine zusätzliche Konfigurationsoption zum Generieren eines untergeordneten Zertifikats.
Wenn Sie bereits eine TrustConfig-Ressource mit Zwischenzertifikaten (int.cert
und int.key
) erstellt haben, folgen Sie dieser Anleitung:
Erstellen Sie eine Konfigurationsdatei für den Clientschlüssel.
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
Wenn Sie eine SPIFFE-Identität anhängen möchten, gehen Sie so vor:
Fügen Sie so einen
subjectAltName
in den Abschnitt[extension_requirements]
ein:subjectAltName = @sans_list
Fügen Sie am Ende der Datei
client.config
einen neuen Abschnitt hinzu:[sans_list] URI.1 = spiffe://example.com/test-identity
Signieren Sie den Schlüssel.
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
Senden Sie zum Testen eine
curl
-Anfrage an die IP-Adresse des Load Balancers.curl -v -k --key client.key --cert client.cert https://IP_ADDRESS
Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Load-Balancers.
Nächste Schritte
- Gegenseitiges TLS für einen globalen externen Anwendungs-Load-Balancer einrichten
- Gegenseitiges TLS für einen klassischen Anwendungs-Load-Balancer einrichten
- Gegenseitiges TLS für einen internen Application Load Balancer einrichten
- Gegenseitiges TLS für regionalen externen Application Load Balancer einrichten
- Gegenseitiges TLS mit privater CA einrichten