Zertifikat anfordern

Auf dieser Seite wird beschrieben, wie Sie eine Zertifikatsanfrage im Certificate Authority Service erstellen.

Sie können ein Zertifikat mit den folgenden Methoden anfordern:

  1. Generieren Sie Ihren eigenen privaten oder öffentlichen Schlüssel und senden Sie eine Anfrage für die Signierung des Zertifikats (Certificate Signing Request, CSR).
  2. Verwenden Sie einen privaten oder öffentlichen Schlüssel, der automatisch vom CA Service generiert wurde.
  3. Verwenden Sie einen vorhandenen Cloud Key Management Service-Schlüssel (Cloud KMS).

Hinweise

  1. Umgebung für CA Service vorbereiten

  2. Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „CA Service Certificate Requester“ (roles/privateca.certificateRequester) oder „CA Service Certificate Manager“ (roles/privateca.certificateManager) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausstellen von Zertifikaten benötigen.

    Weitere Informationen zu den vordefinierten IAM-Rollen für den CA-Dienst finden Sie unter Zugriffssteuerung mit IAM.

    Informationen zum Zuweisen einer IAM-Rolle zu einem Hauptkonto finden Sie unter Einzelne Rolle zuweisen.

Zertifikat über eine CSR anfordern

Um ein Zertifikat zu erhalten, generieren Sie eine CSR, mit der Sie das Zertifikat anfordern.

CSR generieren

Eine detaillierte Anleitung zum Generieren eines CSR mit OpenSSL finden Sie unter CSR mit OpenSSL generieren. Sie können auch die folgende Beispielkonfigurationsdatei als Referenz verwenden, wenn Sie Ihren CSR generieren.

So verwenden Sie die Beispielkonfigurationsdatei:

  1. Erstellen Sie mit der folgenden Konfiguration eine Konfigurationsdatei mit dem Namen csr.cnf.

    cat << EOF > csr.cnf
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    CN = example.com
    
    [v3_req]
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = example.com
    DNS.2 = www.example.com
    EOF
    

    In diesem Beispiel wird ein 2048-Bit-RSA-Schlüssel (mit Passphrase verschlüsselt) und ein entsprechender CSR mit den folgenden Informationen generiert:

    • das Attribut commonName im Subjekt-DN
    • die Erweiterung „subjectAlternativeName
    • die Erweiterung keyUsage (als kritisch markiert)
    • die Erweiterung „extendedKeyUsage

    Passen Sie die Parameter nach Bedarf an. Informationen zur Verwendung des Konfigurationsdateiformats x509v3_config zum Definieren von Erweiterungen für X.509-Zertifikate und CSRs finden Sie in der OpenSSL-Dokumentation.

  2. Führen Sie den folgenden openssl-Befehl aus, um eine CSR und einen entsprechenden privaten Schlüssel zu generieren:

    openssl req -newkey rsa:2048 -out csr.pem -keyout key.pem -config csr.cnf
    

    Mit diesem Befehl werden die folgenden Dateien generiert:

    • csr.pem: Ihre CSR, die zur Einreichung bei einer Zertifizierungsstelle bereit ist
    • key.pem: Ihr privater Schlüssel, den Sie sicher aufbewahren sollten

    Verwenden Sie die Datei csr.pem in Ihrem Zertifikatsantrag.

Zertifikatsanfrage mit der CSR einreichen

So fordern Sie ein Zertifikat mit der CSR an:

Console

  1. Rufen Sie in derGoogle Cloud Console die Seite Certificate Authority Service auf.

    Zum Certificate Authority Service

  2. Klicken Sie auf Zertifikat anfordern.

  3. Wählen Sie eine Region aus. Die Region muss mit der Region des CA-Pools übereinstimmen, den Sie verwenden möchten.

  4. Wählen Sie einen CA-Pool aus.

  5. Optional: Wählen Sie eine bestimmte Zertifizierungsstelle aus dem Zertifizierungsstellenpool aus. Wenn Sie eine bestimmte Zertifizierungsstelle für die Zertifikatsausstellung auswählen, entsteht eine Abhängigkeit von dieser Zertifizierungsstelle, was das Rotieren von Zertifizierungsstellen erschwert.

  6. Optional: Wählen Sie eine Zertifikatsvorlage aus. Wenn Sie eine Zertifikatsvorlage verwenden, achten Sie darauf, dass die Richtlinien der Zertifikatsvorlage nicht mit den Richtlinien des ausgewählten CA-Pools in Konflikt stehen.

  7. Klicken Sie auf Anfrage zur Zertifikatssignierung (Certificate Signing Request, CSR) angeben und dann auf Weiter. Die Zertifikatsdetails werden angezeigt.

  8. Optional: Wenn Sie den automatisch generierten Zertifikatsnamen überschreiben möchten, geben Sie den benutzerdefinierten Namen in das Feld Zertifikatsname ein. Nachdem das Zertifikat erstellt wurde, können Sie den Zertifikatsnamen nicht mehr löschen oder wiederverwenden.

  9. Optional: Wenn Sie einen benutzerdefinierten Gültigkeitszeitraum für das Zertifikat auswählen möchten, geben Sie den Wert in das Feld Gültig bis ein.

  10. Kopieren Sie Ihre CSR und fügen Sie sie in das Feld Certificate CSR (CSR für Zertifikat) ein. Wenn Sie eine Datei mit dem CSR hochladen möchten, klicken Sie auf Durchsuchen und wählen Sie die Datei aus.

  11. Klicken Sie auf Zertifikat generieren.

Signiertes Zertifikat herunterladen

  1. Wenn Sie das generierte Zertifikat aufrufen möchten, klicken Sie auf Zertifikat ansehen und dann auf Ansehen.
  2. Klicken Sie auf , um das Zertifikat zu kopieren. Wenn Sie das Zertifikat als .crt-Datei herunterladen möchten, klicken Sie auf Zertifikat herunterladen.
  3. Optional: Wenn Sie die Zertifikatskette herunterladen möchten, klicken Sie auf Zertifikatskette herunterladen.

gcloud

gcloud privateca certificates create CERT_ID \
    --issuer-pool POOL_ID \
    --issuer-location ISSUER_LOCATION \
    --csr CSR_FILENAME \
    --cert-output-file CERT_OUTPUT_FILE \
    --validity "P30D"

Ersetzen Sie Folgendes:

  • CERT_ID: die eindeutige Kennung des Zertifikats.
  • POOL_ID: der Name des CA-Pools.
  • ISSUER_LOCATION: der Speicherort des Zertifikats.
  • CSR_FILENAME: Die Datei, in der die PEM-codierte CSR gespeichert ist.
  • CERT_OUTPUT_FILE: der Pfad, in den die PEM-codierte Zertifikatskettendatei geschrieben werden muss. Die Zertifikatskette ist von der Endentität zum Stamm geordnet.

Das Flag --validity definiert die Gültigkeitsdauer des Zertifikats. Es ist ein optionales Flag mit dem Standardwert von 30 Tagen.

Weitere Informationen zum Befehl gcloud privateca certificates create finden Sie unter gcloud privateca certificates create.

Terraform

resource "google_privateca_certificate_authority" "test_ca" {
  pool                     = "my-pool"
  certificate_authority_id = "my-certificate-authority"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-certificate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        # is_ca *MUST* be true for certificate authorities
        is_ca = true
      }
      key_usage {
        base_key_usage {
          # cert_sign and crl_sign *MUST* be true for certificate authorities
          cert_sign = true
          crl_sign  = true
        }
        extended_key_usage {
          server_auth = false
        }
      }
    }
  }
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}


resource "google_privateca_certificate" "default" {
  pool                  = "my-pool"
  location              = "us-central1"
  certificate_authority = google_privateca_certificate_authority.test_ca.certificate_authority_id
  lifetime              = "860s"
  name                  = "my-certificate"
  pem_csr               = tls_cert_request.example.cert_request_pem
}

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

resource "tls_cert_request" "example" {
  private_key_pem = tls_private_key.example.private_key_pem

  subject {
    common_name  = "example.com"
    organization = "ACME Examples, Inc"
  }
}

REST API

  1. Generieren Sie eine Zertifikatsignierungsanfrage (Certificate Signing Request, CSR) mit der Methode Ihrer Wahl, z. B. openssl.

    Das folgende Beispiel zeigt einen für JSON codierten CSR.

    -----BEGIN CERTIFICATE REQUEST-----\nMIIChTCCAW0CAQAwQDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQK\nDAZKb29uaXgxEzARBgNVBAMMCmpvb25peC5uZXQwggEiMA0GCSqGSIb3DQEBAQUA\nA4IBDwAwggEKAoIBAQCnyy+5vcRQUBPqAse3ojmWjyUvhcJK6eLRXpp0teEUF5kg\nHb2ov8gYXb9sSim5fnvs09dGYDKibSrL4Siy7lA/NzMzWtKwyQQeLIQq/cLUJVcd\ndItJ0VRcqr+UPkTCii2vrdcocNDChHM1J8chDdl6DkpYieSTqZwlPcWlQBGAINmT\nT3Q0ZarIVM5l74j13WPuToGrhbVOIZXWxWqJjlHbBA8B/VKtSRCzM1qG60y8Pu2f\n6c78Dfg8+CGRzGwnz8aFS0Yf9czT9luNHSadS/RHjvE9FPZCsinz+6mJlXRcphi1\nKaHsDbstUAhse1h5E9Biyr9SFYRHxY7qRv9aSJ/dAgMBAAGgADANBgkqhkiG9w0B\nAQsFAAOCAQEAZz+I9ff1Rf3lTewXRUpA7nr5HVO1ojCR93Pf27tI/hvNH7z7GwnS\noScoJlClxeRqABOCnfmVoRChullb/KmER4BZ/lF0GQpEtbqbjgjkEDpVlBKCb0+L\nHE9psplIz6H9nfFS3Ouoiodk902vrMEh0LyDYNQuqFoyCZuuepUlK3NmtmkexlgT\n0pJg/5FV0iaQ+GiFXSZhTC3drfiM/wDnXGiqpbW9WmebSij5O+3BNYXKBUgqmT3r\nbryFydNq4qSOIbnN/MNb4UoKno3ve7mnGk9lIDf9UMPvhl+bT7C3OLQLGadJroME\npYnKLoZUvRwEdtZpbNL9QhCAm2QiJ6w+6g==\n-----END CERTIFICATE REQUEST-----
    
  2. Zertifikat anfordern

    HTTP-Methode und URL:

    POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificates?certificate_id=CERTIFICATE_ID

    JSON-Text anfordern:

    {
        "lifetime": {
        "seconds": 3600,
        "nanos": 0
        },
        "pem_csr": "PEM_CSR"
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

    {
        "name": "projects/project-id/locations/location/certificateAuthorities/ca-id/certificates/certificate-id",
        "pemCertificate": "-----BEGIN CERTIFICATE-----...",
        "certificateDescription": {...}
    }
    

Zertifikat mit einem automatisch generierten Schlüssel anfordern

Console

Sie können die Google Cloud Console verwenden, um Client- oder Server-TLS-Zertifikate zu generieren.

  1. Rufen Sie in derGoogle Cloud Console die Seite Certificate Authority Service auf.

    Zum Certificate Authority Service

  2. Klicken Sie auf Zertifikat anfordern.

  3. Wählen Sie eine Region aus. Die Region muss mit der Region des CA-Pools übereinstimmen, den Sie verwenden möchten.

  4. Wählen Sie einen CA-Pool aus.

  5. Klicken Sie auf Details manuell eingeben. Die Zertifikatsdetails werden angezeigt.

  6. Optional: Ersetzen Sie den automatisch generierten Zertifikatsnamen durch einen benutzerdefinierten Namen, der eindeutig ist.

  7. Optional: Wenn Sie einen benutzerdefinierten Gültigkeitszeitraum für das Zertifikat auswählen möchten, geben Sie den Wert in das Feld Gültig bis ein.

Domainnamen hinzufügen

  1. Geben Sie unter Domainnamen hinzufügen einen Domainnamen in das Feld Domainname 1 ein.
  2. Optional: Wenn Sie mehr als einen Domainnamen hinzufügen möchten, klicken Sie auf Element hinzufügen und geben Sie einen weiteren Domainnamen in das Feld Domainname 2 ein.

Erweiterte Schlüsselverwendung

  1. Optional: Wählen Sie unter Erweiterte Schlüsselverwendung je nach Anwendungsfall eine der folgenden Optionen aus:

    • Client-TLS: Mit diesen Zertifikaten können Sie die Identität eines Anfragenden authentifizieren.
    • Server-TLS: Mit diesen Zertifikaten können Sie die Identität eines Servers authentifizieren.
  2. Klicken Sie auf Weiter.

Schlüsselgröße und Algorithmus konfigurieren

  1. Optional: Wählen Sie unter Schlüsselgröße und Algorithmus konfigurieren die Größe und den Algorithmus des Signaturschlüssels aus der Liste aus. Wenn Sie diesen Schritt überspringen, wird ein RSASSA-PSS-2048-Bit-Schlüssel mit einem SHA-256-Digest verwendet. Informationen zum Auswählen eines Signierschlüssels und ‑algorithmus finden Sie unter Schlüsselalgorithmus auswählen.
  2. Klicken Sie auf Zertifikat generieren.

Signiertes Zertifikat herunterladen

  1. Wenn Sie das generierte Zertifikat aufrufen möchten, klicken Sie auf Zertifikat ansehen und dann auf Ansehen.
  2. Optional: Wenn Sie die PEM-codierte Zertifikatskette herunterladen möchten, klicken Sie auf Zertifikatskette herunterladen.
  3. Optional: Wenn Sie den zugehörigen PEM-codierten privaten Schlüssel herunterladen möchten, klicken Sie auf Privaten Schlüssel herunterladen.

gcloud

Wenn Sie die Funktion für automatisch generierte Schlüssel verwenden möchten, müssen Sie die Python Cryptographic Authority (PyCA)-Bibliothek installieren. Eine Anleitung zur Installation der Pyca Cryptography-Bibliothek finden Sie unter Pyca Cryptography-Bibliothek einschließen.

Verwenden Sie den folgenden gcloud-Befehl, um ein Zertifikat zu erstellen:

gcloud privateca certificates create \
    --issuer-pool POOL_ID \
    --issuer-location ISSUER_LOCATION \
    --generate-key \
    --key-output-file KEY_FILENAME \
    --cert-output-file CERT_OUTPUT_FILE \
    --dns-san "DNS_NAME" \
    --use-preset-profile "CERTIFICATE_PROFILE"

Ersetzen Sie Folgendes:

  • POOL_ID: der Name des CA-Pools.
  • ISSUER_LOCATION: der Speicherort des Zertifikats.
  • KEY_FILENAME: der Pfad, in den die generierte private Schlüsseldatei geschrieben werden muss.
  • CERT_OUTPUT_FILE: Der Pfad, in den die PEM-codierte Zertifikatskettendatei geschrieben werden muss. Die Zertifikatskette ist von der Endentität bis zum Root-Zertifikat geordnet.
  • DNS_NAME: Ein oder mehrere durch Kommas getrennte alternative DNS-Inhabernamen (Subject Alternative Names, SANs).
  • CERTIFICATE_PROFILE: die eindeutige Kennung des Zertifikatprofils. Verwenden Sie beispielsweise leaf_server_tls für die Server-TLS-Authentifizierung von Endentitäten.

Im Befehl gcloud werden die folgenden Flags erwähnt:

  • --generate-key: Generiert einen neuen privaten RSA-2048-Schlüssel auf Ihrem Computer.

Sie können auch eine beliebige Kombination der folgenden Flags verwenden:

  • --dns-san: Hiermit können Sie einen oder mehrere durch Kommas getrennte DNS-SANs übergeben.
  • --ip-san: Hiermit können Sie ein oder mehrere durch Kommas getrennte IP-SANs übergeben.
  • --uri-san: Hiermit können Sie einen oder mehrere durch Kommas getrennte URI-SANs übergeben.
  • --subject: Hiermit können Sie einen X.501-Namen des Zertifikatsubjekts übergeben.

Weitere Informationen zum Befehl gcloud privateca certificates create finden Sie unter gcloud privateca certificates create.

Go

Richten Sie zur Authentifizierung beim CA Service die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import (
	"context"
	"fmt"
	"io"

	privateca "cloud.google.com/go/security/privateca/apiv1"
	"cloud.google.com/go/security/privateca/apiv1/privatecapb"
	"google.golang.org/protobuf/types/known/durationpb"
)

// Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
// The key used to sign the certificate is created by the Cloud KMS.
func createCertificate(
	w io.Writer,
	projectId string,
	location string,
	caPoolId string,
	caId string,
	certId string,
	commonName string,
	domainName string,
	certDuration int64,
	publicKeyBytes []byte) error {
	// projectId := "your_project_id"
	// location := "us-central1"		// For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
	// caPoolId := "ca-pool-id"			// The CA Pool id in which the certificate authority exists.
	// caId := "ca-id"					// The name of the certificate authority which issues the certificate.
	// certId := "certificate"			// A unique name for the certificate.
	// commonName := "cert-name"		// A common name for the certificate.
	// domainName := "cert.example.com"	// Fully qualified domain name for the certificate.
	// certDuration := int64(31536000)	// The validity of the certificate in seconds.
	// publicKeyBytes 					// The public key used in signing the certificates.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	// Set the Public Key and its format.
	publicKey := &privatecapb.PublicKey{
		Key:    publicKeyBytes,
		Format: privatecapb.PublicKey_PEM,
	}

	// Set Certificate subject config.
	subjectConfig := &privatecapb.CertificateConfig_SubjectConfig{
		Subject: &privatecapb.Subject{
			CommonName: commonName,
		},
		SubjectAltName: &privatecapb.SubjectAltNames{
			DnsNames: []string{domainName},
		},
	}

	// Set the X.509 fields required for the certificate.
	x509Parameters := &privatecapb.X509Parameters{
		KeyUsage: &privatecapb.KeyUsage{
			BaseKeyUsage: &privatecapb.KeyUsage_KeyUsageOptions{
				DigitalSignature: true,
				KeyEncipherment:  true,
			},
			ExtendedKeyUsage: &privatecapb.KeyUsage_ExtendedKeyUsageOptions{
				ServerAuth: true,
				ClientAuth: true,
			},
		},
	}

	// Set certificate settings.
	cert := &privatecapb.Certificate{
		CertificateConfig: &privatecapb.Certificate_Config{
			Config: &privatecapb.CertificateConfig{
				PublicKey:     publicKey,
				SubjectConfig: subjectConfig,
				X509Config:    x509Parameters,
			},
		},
		Lifetime: &durationpb.Duration{
			Seconds: certDuration,
		},
	}

	fullCaPoolName := fmt.Sprintf("projects/%s/locations/%s/caPools/%s", projectId, location, caPoolId)

	// Create the CreateCertificateRequest.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#CreateCertificateRequest.
	req := &privatecapb.CreateCertificateRequest{
		Parent:                        fullCaPoolName,
		CertificateId:                 certId,
		Certificate:                   cert,
		IssuingCertificateAuthorityId: caId,
	}

	_, err = caClient.CreateCertificate(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateCertificate failed: %w", err)
	}

	fmt.Fprintf(w, "Certificate %s created", certId)

	return nil
}

Java

Richten Sie zur Authentifizierung beim CA Service die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import com.google.api.core.ApiFuture;
import com.google.cloud.security.privateca.v1.CaPoolName;
import com.google.cloud.security.privateca.v1.Certificate;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.CertificateConfig;
import com.google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig;
import com.google.cloud.security.privateca.v1.CreateCertificateRequest;
import com.google.cloud.security.privateca.v1.KeyUsage;
import com.google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions;
import com.google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions;
import com.google.cloud.security.privateca.v1.PublicKey;
import com.google.cloud.security.privateca.v1.PublicKey.KeyFormat;
import com.google.cloud.security.privateca.v1.Subject;
import com.google.cloud.security.privateca.v1.SubjectAltNames;
import com.google.cloud.security.privateca.v1.X509Parameters;
import com.google.cloud.security.privateca.v1.X509Parameters.CaOptions;
import com.google.protobuf.ByteString;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateCertificate {

  public static void main(String[] args)
      throws InterruptedException, ExecutionException, IOException {
    // TODO(developer): Replace these variables before running the sample.

    // publicKeyBytes: Public key used in signing the certificates.
    // location: For a list of locations, see:
    // https://cloud.google.com/certificate-authority-service/docs/locations
    // poolId: Set a unique id for the CA pool.
    // certificateAuthorityName: The name of the certificate authority which issues the certificate.
    // certificateName: Set a unique name for the certificate.
    String project = "your-project-id";
    ByteString publicKeyBytes = ByteString.copyFrom(new byte[]{});
    String location = "ca-location";
    String poolId = "ca-poolId";
    String certificateAuthorityName = "certificate-authority-name";
    String certificateName = "certificate-name";

    createCertificate(
        project, location, poolId, certificateAuthorityName, certificateName, publicKeyBytes);
  }

  // Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
  // The public key used to sign the certificate can be generated using any crypto
  // library/framework.
  public static void createCertificate(
      String project,
      String location,
      String poolId,
      String certificateAuthorityName,
      String certificateName,
      ByteString publicKeyBytes)
      throws InterruptedException, ExecutionException, IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `certificateAuthorityServiceClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (CertificateAuthorityServiceClient certificateAuthorityServiceClient =
        CertificateAuthorityServiceClient.create()) {

      // commonName: Enter a title for your certificate.
      // orgName: Provide the name of your company.
      // domainName: List the fully qualified domain name.
      // certificateLifetime: The validity of the certificate in seconds.
      String commonName = "commonname";
      String orgName = "orgname";
      String domainName = "dns.example.com";
      long certificateLifetime = 1000L;

      // Set the Public Key and its format.
      PublicKey publicKey =
          PublicKey.newBuilder().setKey(publicKeyBytes).setFormat(KeyFormat.PEM).build();

      SubjectConfig subjectConfig =
          SubjectConfig.newBuilder()
              // Set the common name and org name.
              .setSubject(
                  Subject.newBuilder().setCommonName(commonName).setOrganization(orgName).build())
              // Set the fully qualified domain name.
              .setSubjectAltName(SubjectAltNames.newBuilder().addDnsNames(domainName).build())
              .build();

      // Set the X.509 fields required for the certificate.
      X509Parameters x509Parameters =
          X509Parameters.newBuilder()
              .setKeyUsage(
                  KeyUsage.newBuilder()
                      .setBaseKeyUsage(
                          KeyUsageOptions.newBuilder()
                              .setDigitalSignature(true)
                              .setKeyEncipherment(true)
                              .setCertSign(true)
                              .build())
                      .setExtendedKeyUsage(
                          ExtendedKeyUsageOptions.newBuilder().setServerAuth(true).build())
                      .build())
              .setCaOptions(CaOptions.newBuilder().setIsCa(true).buildPartial())
              .build();

      // Create certificate.
      Certificate certificate =
          Certificate.newBuilder()
              .setConfig(
                  CertificateConfig.newBuilder()
                      .setPublicKey(publicKey)
                      .setSubjectConfig(subjectConfig)
                      .setX509Config(x509Parameters)
                      .build())
              .setLifetime(Duration.newBuilder().setSeconds(certificateLifetime).build())
              .build();

      // Create the Certificate Request.
      CreateCertificateRequest certificateRequest =
          CreateCertificateRequest.newBuilder()
              .setParent(CaPoolName.of(project, location, poolId).toString())
              .setCertificateId(certificateName)
              .setCertificate(certificate)
              .setIssuingCertificateAuthorityId(certificateAuthorityName)
              .build();

      // Get the Certificate response.
      ApiFuture<Certificate> future =
          certificateAuthorityServiceClient
              .createCertificateCallable()
              .futureCall(certificateRequest);

      Certificate response = future.get();
      // Get the PEM encoded, signed X.509 certificate.
      System.out.println(response.getPemCertificate());
      // To verify the obtained certificate, use this intermediate chain list.
      System.out.println(response.getPemCertificateChainList());
    }
  }
}

Python

Richten Sie zur Authentifizierung beim CA Service die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import google.cloud.security.privateca_v1 as privateca_v1
from google.protobuf import duration_pb2


def create_certificate(
    project_id: str,
    location: str,
    ca_pool_name: str,
    ca_name: str,
    certificate_name: str,
    common_name: str,
    domain_name: str,
    certificate_lifetime: int,
    public_key_bytes: bytes,
) -> None:
    """
    Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
    The key used to sign the certificate is created by the Cloud KMS.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        location: location you want to use. For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
        ca_pool_name: set a unique name for the CA pool.
        ca_name: the name of the certificate authority which issues the certificate.
        certificate_name: set a unique name for the certificate.
        common_name: a title for your certificate.
        domain_name: fully qualified domain name for your certificate.
        certificate_lifetime: the validity of the certificate in seconds.
        public_key_bytes: public key used in signing the certificates.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    # The public key used to sign the certificate can be generated using any crypto library/framework.
    # Also you can use Cloud KMS to retrieve an already created public key.
    # For more info, see: https://cloud.google.com/kms/docs/retrieve-public-key.

    # Set the Public Key and its format.
    public_key = privateca_v1.PublicKey(
        key=public_key_bytes,
        format_=privateca_v1.PublicKey.KeyFormat.PEM,
    )

    subject_config = privateca_v1.CertificateConfig.SubjectConfig(
        subject=privateca_v1.Subject(common_name=common_name),
        subject_alt_name=privateca_v1.SubjectAltNames(dns_names=[domain_name]),
    )

    # Set the X.509 fields required for the certificate.
    x509_parameters = privateca_v1.X509Parameters(
        key_usage=privateca_v1.KeyUsage(
            base_key_usage=privateca_v1.KeyUsage.KeyUsageOptions(
                digital_signature=True,
                key_encipherment=True,
            ),
            extended_key_usage=privateca_v1.KeyUsage.ExtendedKeyUsageOptions(
                server_auth=True,
                client_auth=True,
            ),
        ),
    )

    # Create certificate.
    certificate = privateca_v1.Certificate(
        config=privateca_v1.CertificateConfig(
            public_key=public_key,
            subject_config=subject_config,
            x509_config=x509_parameters,
        ),
        lifetime=duration_pb2.Duration(seconds=certificate_lifetime),
    )

    # Create the Certificate Request.
    request = privateca_v1.CreateCertificateRequest(
        parent=caServiceClient.ca_pool_path(project_id, location, ca_pool_name),
        certificate_id=certificate_name,
        certificate=certificate,
        issuing_certificate_authority_id=ca_name,
    )
    result = caServiceClient.create_certificate(request=request)

    print("Certificate creation result:", result)

Zertifikat mit einem vorhandenen Cloud KMS-Schlüssel anfordern

Sie können nur die Google Cloud CLI verwenden, um Zertifikate mit einem Cloud KMS-Schlüssel anzufordern.

gcloud

Führen Sie den folgenden Befehl aus, um ein TLS-Zertifikat für einen Endentitätsserver mit einem Cloud KMS-Schlüssel zu erstellen:

gcloud privateca certificates create \
    --issuer-pool POOL_ID \
    --issuer-location ISSUER_LOCATION \
    --kms-key-version projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/KEY_VERSION \
    --cert-output-file CERT_OUTPUT_FILE \
    --dns-san "DNS_NAME" \
    --use-preset-profile "leaf_server_tls"

Ersetzen Sie Folgendes:

  • POOL_ID: der Name des CA-Pools.
  • ISSUER_LOCATION: der Speicherort des Zertifikats.
  • PROJECT_ID: Projekt-ID.
  • LOCATION_ID: der Speicherort des Schlüsselbunds
  • KEY_RING: der Name des Schlüsselbunds, in dem sich der Schlüssel befindet.
  • KEY: Der Name des Schlüssels.
  • KEY_VERSION: Die Version des Schlüssels.
  • CERT_OUTPUT_FILE: Der Pfad zur PEM-codierten Zertifikatskettendatei. Die Datei der Zertifikatskette ist von der Endentität zum Stamm sortiert.
  • DNS_NAME: Durch Kommas getrennte DNS-SANs.

Zertifikat von einer bestimmten CA in einem CA-Pool ausstellen

In diesem Abschnitt wird beschrieben, wie Sie Zertifikate von einer bestimmten CA in einem CA-Pool ausstellen.

Console

  1. Rufen Sie in derGoogle Cloud Console die Seite Certificate Authority Service auf.

    Zum Certificate Authority Service

  2. Klicken Sie auf Zertifikat anfordern.

  3. Wählen Sie eine Region aus. Die Region muss mit der Region des CA-Pools übereinstimmen, den Sie verwenden möchten.

  4. Wählen Sie einen CA-Pool aus.

  5. Wenn Sie eine Zertifizierungsstelle auswählen möchten, klicken Sie auf Eine bestimmte Zertifizierungsstelle aus diesem Zertifizierungsstellenpool verwenden und wählen Sie dann eine Zertifizierungsstelle aus der Liste aus.

  6. Wählen Sie andere Parameter aus, wie im Abschnitt Zertifikat mit einem automatisch generierten Schlüssel anfordern oder im Abschnitt Zertifikat mit einer CSR anfordern beschrieben.

gcloud

Wenn Sie eine bestimmte CA im CA-Pool für die Zertifikatsausstellung verwenden möchten, fügen Sie das Flag --ca mit dem CA_ID der CA hinzu, die das Zertifikat ausstellen muss.

gcloud privateca certificates create \
    --issuer-pool POOL_ID \
    --issuer-location ISSUER_LOCATION \
    --ca CA_ID \
    --generate-key \
    --key-output-file KEY_FILENAME \
    --cert-output-file CERT_OUTPUT_FILE \
    --dns-san "DNS_NAME" \
    --use-preset-profile "leaf_server_tls"

Terraform

resource "google_privateca_certificate_authority" "authority" {
  // This example assumes this pool already exists.
  // Pools cannot be deleted in normal test circumstances, so we depend on static pools
  pool                     = "my-pool"
  certificate_authority_id = "my-sample-certificate-authority"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-certificate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        is_ca = true
      }
      key_usage {
        base_key_usage {
          digital_signature = true
          cert_sign         = true
          crl_sign          = true
        }
        extended_key_usage {
          server_auth = true
        }
      }
    }
  }
  lifetime = "86400s"
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}


resource "google_privateca_certificate" "default" {
  pool     = "my-pool"
  location = "us-central1"
  lifetime = "860s"
  name     = "my-sample-certificate"
  config {
    subject_config {
      subject {
        common_name         = "san1.example.com"
        country_code        = "us"
        organization        = "google"
        organizational_unit = "enterprise"
        locality            = "mountain view"
        province            = "california"
        street_address      = "1600 amphitheatre parkway"
        postal_code         = "94109"
      }
    }
    x509_config {
      ca_options {
        is_ca = false
      }
      key_usage {
        base_key_usage {
          crl_sign = true
        }
        extended_key_usage {
          server_auth = true
        }
      }
    }
    public_key {
      format = "PEM"
      key    = base64encode(data.tls_public_key.example.public_key_pem)
    }
  }
  // Certificates require an authority to exist in the pool, though they don't
  // need to be explicitly connected to it
  depends_on = [google_privateca_certificate_authority.authority]
}

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

data "tls_public_key" "example" {
  private_key_pem = tls_private_key.example.private_key_pem
}

Zertifikat im Validierungsmodus anfordern

Wenn Sie ein Zertifikat im Validierungsmodus anfordern, wird ein unsigniertes Testzertifikat erstellt. Dieses Testzertifikat ist nicht PEM-codiert und es fallen keine Kosten an. Sie können das Zertifikat zwar nicht herunterladen, aber anhand der hypothetischen Zertifikatsbeschreibung prüfen, ob Sie mit den ausgewählten Parametern ein signiertes Zertifikat ausstellen können.

So fordern Sie ein Zertifikat im Validierungsmodus an:

Console

  1. Rufen Sie in derGoogle Cloud Console die Seite Certificate Authority Service auf.

    Zum Certificate Authority Service

  2. Klicken Sie auf Zertifikat anfordern.

  3. Wählen Sie Validierungsmodus für die Beschreibung eines hypothetischen Zertifikats anstelle eines signierten Zertifikats verwenden aus.

  4. Führen Sie dieselben Schritte aus wie beim Anfordern eines signierten Zertifikats.

Nächste Schritte