Untergeordnete Zertifizierungsstelle erstellen

Auf dieser Seite wird beschrieben, wie Sie untergeordnete Zertifizierungsstellen in einem Zertifizierungsstellenpool erstellen.

Untergeordnete Zertifizierungsstellen sind dafür verantwortlich, Zertifikate direkt an Endentitäten wie Nutzer, Computer und Geräte auszustellen. Untergeordnete Zertifizierungsstellen werden kryptografisch von einer übergeordneten Zertifizierungsstelle signiert, die oft die Stamm-CA ist. Infolgedessen vertrauen Systeme, die der Stamm-CA vertrauen, automatisch auch den untergeordneten Zertifizierungsstellen und den Zertifikaten der Endentität, die von den untergeordneten Zertifizierungsstellen ausgestellt werden.

Hinweise

  • Sie benötigen die IAM-Rolle „CA Service Operation Manager“ (roles/privateca.caManager) oder die IAM-Rolle „CA Service Admin“ (roles/privateca.admin). Weitere Informationen finden Sie unter IAM-Richtlinien konfigurieren.
  • Erstellen Sie einen CA-Pool.
  • Wählen Sie Ihre Stammzertifizierungsstelle aus.

Untergeordnete Zertifizierungsstelle erstellen

Untergeordnete Zertifizierungsstellen lassen sich leichter widerrufen und rotieren als Stamm-CAs. Wenn Sie mehrere Szenarien der Zertifikatsausstellung haben, können Sie für jedes dieser Szenarien eine untergeordnete Zertifizierungsstelle erstellen. Wenn Sie einem CA-Pool mehrere untergeordnete CAs hinzufügen, erreichen Sie ein besseres Load-Balancing von Zertifikatsanfragen und eine höhere Gesamtzahl von effektiven Abfragen pro Sekunde.

So erstellen Sie eine untergeordnete Zertifizierungsstelle:

Console

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

    Zum Certificate Authority Service

  2. Klicken Sie auf den Tab CA-Manager.

  3. Klicken Sie auf Zertifizierungsstelle erstellen.

    Zertifizierungsstelle mit der Cloud Console erstellen

CA-Typ auswählen

  1. Klicken Sie auf Untergeordnete Zertifizierungsstelle.
  2. Klicken Sie auf Root-Zertifizierungsstelle befindet sich in Google Cloud.
  3. Geben Sie im Feld Gültig für die Dauer ein, für die das CA-Zertifikat gültig sein soll.
  4. Optional: Wählen Sie die Stufe für die Zertifizierungsstelle aus. Die Standardstufe ist Enterprise. Weitere Informationen finden Sie unter Vorgangsebenen auswählen.
  5. Klicken Sie auf Region, um einen Standort für die Zertifizierungsstelle auszuwählen. Weitere Informationen finden Sie unter Standorte.
  6. Optional: Wählen Sie unter Initialisierung des Status den Status aus, in dem sich die Zertifizierungsstelle beim Erstellen befinden muss.
  7. Optional: Klicken Sie unter Ausstellungsszenario einrichten auf Zertifikatsprofil und wählen Sie aus der Liste das Zertifikatsprofil aus, das Ihren Anforderungen am besten entspricht. Weitere Informationen finden Sie unter Zertifikatsprofile.
  8. Klicken Sie auf Next (Weiter).
CA-Betreffnamen konfigurieren
  1. Geben Sie in das Feld Organisation (O) den Namen Ihres Unternehmens ein.
  2. Optional: Geben Sie im Feld Organisationseinheit (OE) die Untergruppe oder Geschäftseinheit des Unternehmens ein.
  3. Optional: Geben Sie in das Feld Landesname einen zweistelligen Ländercode ein.
  4. Optional: Geben Sie in das Feld Name des Bundesstaats/-landes den Namen Ihres Bundesstaates ein.
  5. Optional: Geben Sie in das Feld Ortsname den Namen der Stadt ein.
  6. Geben Sie in das Feld CA Common Name (CN) den Namen der Zertifizierungsstelle ein.
  7. Geben Sie im Feld Pool-ID den Namen des Zertifizierungsstellenpools ein. Sie können den Zertifizierungsstellenpool nach dem Erstellen der Zertifizierungsstelle nicht mehr ändern.
  8. Klicken Sie auf Next (Weiter).
Größe und Algorithmus des Zertifizierungsstellenschlüssels konfigurieren
  1. Wählen Sie den Schlüsselalgorithmus aus, der Ihre Anforderungen am besten erfüllt. Informationen zur Auswahl eines geeigneten Schlüsselalgorithmus finden Sie unter Schlüsselalgorithmus auswählen.
  2. Klicken Sie auf Next (Weiter).
CA-Artefakte konfigurieren

Die folgenden Schritte sind optional. Wenn Sie diese Schritte überspringen, gelten die Standardeinstellungen.

  1. Wählen Sie aus, ob Sie einen von Google verwalteten oder einen selbstverwalteten Cloud Storage-Bucket verwenden möchten.
  2. Wenn Sie keinen selbstverwalteten Cloud Storage-Bucket auswählen, erstellt CA Service einen von Google verwalteten Bucket am selben Standort wie die Zertifizierungsstelle.

  3. Wählen Sie aus, ob Sie das Veröffentlichen von Zertifikatssperrlisten (CRLs) und CA-Zertifikaten im Cloud Storage-Bucket deaktivieren möchten.
  4. Das Veröffentlichen von Zertifikatssperrlisten und Zertifizierungsstellen der Zertifizierungsstelle in einem Cloud Storage-Bucket ist standardmäßig aktiviert. Klicken Sie auf die Ein-/Aus-Schaltflächen, um diese Einstellungen zu deaktivieren.

  5. Klicken Sie auf Next (Weiter).
Labels hinzufügen

Die folgenden Schritte sind optional.

So fügen Sie der Zertifizierungsstelle Labels hinzu:

  1. Klicken Sie auf Element hinzufügen.
  2. Geben Sie im Feld Schlüssel 1 den Labelschlüssel ein.
  3. Geben Sie im Feld Wert 1 den Wert für das Label ein.
  4. Wenn Sie ein weiteres Label hinzufügen möchten, klicken Sie auf Element hinzufügen. Fügen Sie dann den Labelschlüssel und den Labelwert wie in den Schritten 2 und 3 beschrieben hinzu.
  5. Klicken Sie auf Next (Weiter).
Einstellungen prüfen

Prüfen Sie alle Einstellungen sorgfältig und klicken Sie dann auf Erstellen, um die Zertifizierungsstelle zu erstellen.

gcloud

  1. Erstellen Sie einen Zertifizierungsstellenpool für die untergeordnete Zertifizierungsstelle:

    gcloud privateca pools create SUBORDINATE_POOL_ID
    

    Ersetzen Sie SUBORDINATE_POOL_ID durch den Namen des Zertifizierungsstellenpools.

    Weitere Informationen zum Erstellen von CA-Pools finden Sie unter CA-Pool erstellen.

    Weitere Informationen zum Befehl gcloud privateca pools create finden Sie unter gcloud privatecapools create.

  2. Erstellen Sie eine untergeordnete Zertifizierungsstelle im erstellten Zertifizierungsstellenpool.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
      --pool=SUBORDINATE_POOL_ID \
      --issuer-pool=POOL_ID \
      --key-algorithm="ec-p256-sha256" \
      --subject="CN=Example Server TLS CA, O=Example LLC"
    

    Die folgende Anweisung wird zurückgegeben, wenn die untergeordnete Zertifizierungsstelle erstellt wird.

    Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID].
    

    Führen Sie den folgenden gcloud-Befehl aus, um eine vollständige Liste der Einstellungen aufzurufen:

    gcloud privateca subordinates create --help
    

    Der Befehl gibt Beispiele zum Erstellen einer untergeordneten Zertifizierungsstelle zurück, deren Aussteller sich entweder im CA-Dienst oder an einem anderen Ort befindet.

Terraform

resource "google_privateca_certificate_authority" "root_ca" {
  pool                                   = "my-pool"
  certificate_authority_id               = "my-certificate-authority-root"
  location                               = "us-central1"
  deletion_protection                    = false # set to true to prevent destruction of the resource
  ignore_active_certificates_on_deletion = true
  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_authority" "default" {
  // 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-certificate-authority-sub"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  subordinate_config {
    certificate_authority = google_privateca_certificate_authority.root_ca.name
  }
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-subordinate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        is_ca = true
        # Force the sub CA to only issue leaf certs
        max_issuer_path_length = 0
      }
      key_usage {
        base_key_usage {
          digital_signature  = true
          content_commitment = true
          key_encipherment   = false
          data_encipherment  = true
          key_agreement      = true
          cert_sign          = true
          crl_sign           = true
          decipher_only      = true
        }
        extended_key_usage {
          server_auth      = true
          client_auth      = false
          email_protection = true
          code_signing     = true
          time_stamping    = true
        }
      }
    }
  }
  lifetime = "86400s"
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
  type = "SUBORDINATE"
}

Java

Richten Sie für die Authentifizierung beim CA Service 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.CertificateAuthority;
import com.google.cloud.security.privateca.v1.CertificateAuthority.KeyVersionSpec;
import com.google.cloud.security.privateca.v1.CertificateAuthority.SignHashAlgorithm;
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.CreateCertificateAuthorityRequest;
import com.google.cloud.security.privateca.v1.KeyUsage;
import com.google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions;
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.longrunning.Operation;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateSubordinateCa {

  public static void main(String[] args)
      throws InterruptedException, ExecutionException, IOException {
    // TODO(developer): Replace these variables before running the sample.
    // location: For a list of locations, see:
    // https://cloud.google.com/certificate-authority-service/docs/locations
    // poolId: Set it to the CA Pool under which the CA should be created.
    // subordinateCaName: Unique name for the Subordinate CA.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    String subordinateCaName = "subordinate-certificate-authority-name";

    createSubordinateCertificateAuthority(project, location, poolId, subordinateCaName);
  }

  public static void createSubordinateCertificateAuthority(
      String project, String location, String poolId, String subordinateCaName)
      throws IOException, ExecutionException, InterruptedException {
    // 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()) {

      String commonName = "commonname";
      String orgName = "csr-org-name";
      String domainName = "dns.example.com";
      int caDuration = 100000; // Validity of this CA in seconds.

      // Set the type of Algorithm.
      KeyVersionSpec keyVersionSpec =
          KeyVersionSpec.newBuilder().setAlgorithm(SignHashAlgorithm.RSA_PKCS1_4096_SHA256).build();

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

      //  Set the key usage options for X.509 fields.
      X509Parameters x509Parameters =
          X509Parameters.newBuilder()
              .setKeyUsage(
                  KeyUsage.newBuilder()
                      .setBaseKeyUsage(
                          KeyUsageOptions.newBuilder().setCrlSign(true).setCertSign(true).build())
                      .build())
              .setCaOptions(CaOptions.newBuilder().setIsCa(true).build())
              .build();

      // Set certificate authority settings.
      CertificateAuthority subCertificateAuthority =
          CertificateAuthority.newBuilder()
              .setType(CertificateAuthority.Type.SUBORDINATE)
              .setKeySpec(keyVersionSpec)
              .setConfig(
                  CertificateConfig.newBuilder()
                      .setSubjectConfig(subjectConfig)
                      .setX509Config(x509Parameters)
                      .build())
              // Set the CA validity duration.
              .setLifetime(Duration.newBuilder().setSeconds(caDuration).build())
              .build();

      // Create the CertificateAuthorityRequest.
      CreateCertificateAuthorityRequest subCertificateAuthorityRequest =
          CreateCertificateAuthorityRequest.newBuilder()
              .setParent(CaPoolName.of(project, location, poolId).toString())
              .setCertificateAuthorityId(subordinateCaName)
              .setCertificateAuthority(subCertificateAuthority)
              .build();

      // Create Subordinate CA.
      ApiFuture<Operation> futureCall =
          certificateAuthorityServiceClient
              .createCertificateAuthorityCallable()
              .futureCall(subCertificateAuthorityRequest);

      Operation response = futureCall.get();

      if (response.hasError()) {
        System.out.println("Error while creating Subordinate CA !" + response.getError());
        return;
      }

      System.out.println(
          "Subordinate Certificate Authority created successfully : " + subordinateCaName);
    }
  }
}

Python

Richten Sie für die Authentifizierung beim CA Service 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_subordinate_ca(
    project_id: str,
    location: str,
    ca_pool_name: str,
    subordinate_ca_name: str,
    common_name: str,
    organization: str,
    domain: str,
    ca_duration: int,
) -> None:
    """
    Create Certificate Authority (CA) which is the subordinate CA in the given CA Pool.
    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 it to the CA Pool under which the CA should be created.
        subordinate_ca_name: unique name for the Subordinate CA.
        common_name: a title for your certificate authority.
        organization: the name of your company for your certificate authority.
        domain: the name of your company for your certificate authority.
        ca_duration: the validity of the certificate authority in seconds.
    """

    ca_service_client = privateca_v1.CertificateAuthorityServiceClient()

    # Set the type of Algorithm
    key_version_spec = privateca_v1.CertificateAuthority.KeyVersionSpec(
        algorithm=privateca_v1.CertificateAuthority.SignHashAlgorithm.RSA_PKCS1_4096_SHA256
    )

    # Set CA subject config.
    subject_config = privateca_v1.CertificateConfig.SubjectConfig(
        subject=privateca_v1.Subject(
            common_name=common_name, organization=organization
        ),
        # Set the fully qualified domain name.
        subject_alt_name=privateca_v1.SubjectAltNames(dns_names=[domain]),
    )

    # Set the key usage options for X.509 fields.
    x509_parameters = privateca_v1.X509Parameters(
        key_usage=privateca_v1.KeyUsage(
            base_key_usage=privateca_v1.KeyUsage.KeyUsageOptions(
                crl_sign=True,
                cert_sign=True,
            )
        ),
        ca_options=privateca_v1.X509Parameters.CaOptions(
            is_ca=True,
        ),
    )

    # Set certificate authority settings.
    certificate_authority = privateca_v1.CertificateAuthority(
        type_=privateca_v1.CertificateAuthority.Type.SUBORDINATE,
        key_spec=key_version_spec,
        config=privateca_v1.CertificateConfig(
            subject_config=subject_config,
            x509_config=x509_parameters,
        ),
        # Set the CA validity duration.
        lifetime=duration_pb2.Duration(seconds=ca_duration),
    )

    ca_pool_path = ca_service_client.ca_pool_path(project_id, location, ca_pool_name)

    # Create the CertificateAuthorityRequest.
    request = privateca_v1.CreateCertificateAuthorityRequest(
        parent=ca_pool_path,
        certificate_authority_id=subordinate_ca_name,
        certificate_authority=certificate_authority,
    )

    operation = ca_service_client.create_certificate_authority(request=request)
    result = operation.result()

    print(f"Operation result: {result}")

Untergeordnete Zertifizierungsstelle aktivieren

So aktivieren Sie eine untergeordnete Zertifizierungsstelle:

Console

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

    Zum Certificate Authority Service

  2. Klicken Sie auf den Tab CA-Manager.

  3. Wählen Sie unter Zertifizierungsstellen die Zertifizierungsstelle aus, die Sie aktivieren möchten.

  4. Klicken Sie auf Aktivieren.

  5. Klicken Sie im angezeigten Dialogfeld auf CSR herunterladen, um die PEM-codierte CSR-Datei herunterzuladen, die die ausstellende Zertifizierungsstelle signieren kann.

  6. Klicken Sie auf Next (Weiter).

  7. Klicken Sie im Feld Zertifikatskette hochladen auf Durchsuchen.

  8. Laden Sie die signierte Zertifikatsdatei mit der Erweiterung .crt hoch.

  9. Klicken Sie auf Activate (Aktivieren).

gcloud

Führen Sie den folgenden Befehl aus, um eine neu erstellte untergeordnete Zertifizierungsstelle zu aktivieren:

gcloud privateca subordinates enable SUBORDINATE_CA_ID --pool=SUBORDINATE_POOL_ID

Ersetzen Sie Folgendes:

  • SUBORDINATE_CA_ID: die eindeutige Kennung der untergeordneten Zertifizierungsstelle.
  • SUBORDINATE_POOL_ID: der Name des Zertifizierungsstellenpools, der die untergeordnete Zertifizierungsstelle enthält.

Weitere Informationen zum Befehl gcloud privateca subordinates enable finden Sie unter gcloud privateca subordinates enable.

Terraform

Legen Sie das Feld desired_state in der untergeordneten Zertifizierungsstelle auf ENABLED fest und führen Sie terraform apply aus.

Nächste Schritte