Zertifizierungsstellen löschen

Mit dem Certificate Authority Service können Sie eine vorhandene Zertifizierungsstelle (Certificate Authority, CA) löschen. Die CA wird nach einem 30-tägigen Kulanzzeitraum ab dem Zeitpunkt, an dem der Löschvorgang eingeleitet wird, endgültig gelöscht. Nach Ablauf der Kulanzfrist löscht CA Service die Zertifizierungsstelle und alle verschachtelten Artefakte wie Zertifikate und Zertifikatssperrlisten (Certificate Revocation Lists, CRLs) dauerhaft.

Alle vom Kunden verwalteten Google Cloud Ressourcen, die von der gelöschten CA verwendet wurden, z. B. Cloud Storage-Buckets oder Cloud Key Management Service-Schlüssel, werden nicht gelöscht. Weitere Informationen zu von Google und vom Kunden verwalteten Ressourcen finden Sie unter Ressourcen verwalten.

Eine gelöschte CA wird während des Kulanzzeitraums nicht in Rechnung gestellt. Wenn Sie die CA jedoch wiederherstellen, wird Ihnen für die Zeit, in der sich die CA im Status DELETED befand, der Abrechnungstarif der CA in Rechnung gestellt.

Hinweise

  • Sie benötigen die IAM-Rolle (Identity and Access Management) „CA Service Operation Manager“ (roles/privateca.caManager) oder „CA Service Admin“ (roles/privateca.admin). Weitere Informationen zu den vordefinierten IAM-Rollen für den CA-Dienst finden Sie unter Zugriffssteuerung mit IAM.

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

  • Die Zertifizierungsstelle muss die folgenden Bedingungen erfüllen:

    • Die CA darf keine aktiven Zertifikate enthalten. Ein Zertifikat gilt als aktiv, wenn es die folgenden Bedingungen erfüllt:

    • Das Zertifikat hat ein gültiges „from“- und „to“-Datum.

    • Das Zertifikat wurde nicht widerrufen.

    • Das Gerät oder System, das das Zertifikat verwendet, vertraut der Zertifizierungsstelle, die das Zertifikat ausgestellt hat.

    Bevor Sie die CA löschen, müssen Sie alle aktiven Zertifikate widerrufen, die von der CA ausgestellt wurden. Sie können Zertifikate einer gelöschten CA nicht widerrufen.

CA löschen

So leiten Sie das Löschen einer Zertifizierungsstelle ein:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Zertifizierungsstellen auf.

    Zu Zertifizierungsstellen

  2. Wählen Sie in der Liste der Zertifizierungsstellen die Zertifizierungsstelle aus, die Sie löschen möchten.
  3. Klicken Sie auf Löschen. Das Dialogfeld Zertifizierungsstelle löschen wird angezeigt.
  4. Optional: Setzen Sie ein Häkchen bei einer oder beiden der folgenden Optionen, wenn die Bedingungen auf Sie zutreffen:
    • Diese CA löschen, auch wenn aktive Zertifikate vorhanden sind

      Mit dieser Option können Sie eine CA mit aktiven Zertifikaten löschen. Wenn Sie eine CA mit aktiven Zertifikaten löschen, kann es sein, dass Websites, Anwendungen oder Systeme, die auf diese Zertifikate angewiesen sind, nicht mehr funktionieren. Wir empfehlen, alle aktiven Zertifikate, die von einer Zertifizierungsstelle ausgestellt wurden, zu widerrufen, bevor Sie die Zertifizierungsstelle löschen.

    • Kulanzzeitraum von 30 Tagen überspringen und CA sofort löschen

      Während des 30‑tägigen Kulanzzeitraums haben Sie Zeit, alle von dieser Zertifizierungsstelle ausgestellten Zertifikate zu widerrufen und zu prüfen, ob Systeme von dieser Zertifizierungsstelle abhängig sind. Wir empfehlen, diese Option nur in Testumgebungen zu verwenden, um potenzielle Ausfälle und Datenverluste zu vermeiden.

  5. Klicken Sie auf Bestätigen.

gcloud

  1. Prüfen Sie, ob die Zertifizierungsstelle deaktiviert ist. Sie können nur Zertifizierungsstellen löschen, die sich im Status DISABLED befinden.

    gcloud privateca roots describe CA_ID --pool=POOL_ID --location=LOCATION --format="value(state)"
    

    Ersetzen Sie Folgendes:

    • CA_ID: die eindeutige Kennung der CA.
    • POOL_ID: der Name des CA-Pools, der die CA enthält.
    • LOCATION: der Standort des CA-Pools. Eine vollständige Liste der Standorte finden Sie unter Standorte.

    Weitere Informationen zum Befehl gcloud privateca roots describe finden Sie unter gcloud privateca roots describe.

  2. Wenn die CA nicht deaktiviert ist, führen Sie den folgenden Befehl aus, um sie zu deaktivieren.

    gcloud privateca roots disable CA_ID --pool=POOL_ID --location=LOCATION
    

    Weitere Informationen zum Befehl gcloud privateca roots disable finden Sie unter gcloud privateca roots disable.

  3. Löschen Sie die CA.

    gcloud privateca roots delete CA_ID --pool=POOL_ID --location=LOCATION
    

    Sie können die CA auch dann löschen, wenn sie aktive Zertifikate hat, indem Sie das Flag --ignore-active-certificates in Ihren gcloud-Befehl aufnehmen.

    Weitere Informationen zum Befehl gcloud privateca roots delete finden Sie unter gcloud privateca roots delete.

  4. Bestätigen Sie bei entsprechender Aufforderung, dass Sie die Zertifizierungsstelle löschen möchten.

    Nach der Bestätigung wird die CA zur Löschung geplant und der 30-tägige Kulanzzeitraum beginnt. Der Befehl gibt das erwartete Datum und die erwartete Uhrzeit aus, zu der die Zertifizierungsstelle gelöscht wird.

        Deleted Root CA [projects/PROJECT_ID/locations/us-west1/caPools/POOL_ID/certificateAuthorities/CA_ID] can be undeleted until 2020-08-14T19:28:39Z.
    

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"
)

// Delete a Certificate Authority from the specified CA pool.
// Before deletion, the CA must be disabled or staged and must not contain any active certificates.
func deleteCa(w io.Writer, projectId string, location string, caPoolId string, caId string) 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 id of the CA pool under which the CA is present.
	// caId := "ca-id"				// The id of the CA to be deleted.

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

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

	// Check if the CA is disabled or staged.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#GetCertificateAuthorityRequest.
	caReq := &privatecapb.GetCertificateAuthorityRequest{Name: fullCaName}
	caResp, err := caClient.GetCertificateAuthority(ctx, caReq)
	if err != nil {
		return fmt.Errorf("GetCertificateAuthority failed: %w", err)
	}

	if caResp.State != privatecapb.CertificateAuthority_DISABLED &&
		caResp.State != privatecapb.CertificateAuthority_STAGED {
		return fmt.Errorf("you can only delete disabled or staged Certificate Authorities. %s is not disabled", caId)
	}

	// Create the DeleteCertificateAuthorityRequest.
	// Setting the IgnoreActiveCertificates to True will delete the CA
	// even if it contains active certificates. Care should be taken to re-anchor
	// the certificates to new CA before deleting.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#DeleteCertificateAuthorityRequest.
	req := &privatecapb.DeleteCertificateAuthorityRequest{
		Name:                     fullCaName,
		IgnoreActiveCertificates: false,
	}

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

	if caResp, err = op.Wait(ctx); err != nil {
		return fmt.Errorf("DeleteCertificateAuthority failed during wait: %w", err)
	}

	if caResp.State != privatecapb.CertificateAuthority_DELETED {
		return fmt.Errorf("unable to delete Certificate Authority. Current state: %s", caResp.State.String())
	}

	fmt.Fprintf(w, "Successfully deleted Certificate Authority: %s.", caId)
	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.CertificateAuthority.State;
import com.google.cloud.security.privateca.v1.CertificateAuthorityName;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.DeleteCertificateAuthorityRequest;
import com.google.longrunning.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class DeleteCertificateAuthority {

  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: The id of the CA pool under which the CA is present.
    // certificateAuthorityName: The name of the CA to be deleted.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    String certificateAuthorityName = "certificate-authority-name";
    deleteCertificateAuthority(project, location, poolId, certificateAuthorityName);
  }

  // Delete the Certificate Authority from the specified CA pool.
  // Before deletion, the CA must be disabled and must not contain any active certificates.
  public static void deleteCertificateAuthority(
      String project, String location, String poolId, String certificateAuthorityName)
      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()) {
      // Create the Certificate Authority Name.
      CertificateAuthorityName certificateAuthorityNameParent =
          CertificateAuthorityName.newBuilder()
              .setProject(project)
              .setLocation(location)
              .setCaPool(poolId)
              .setCertificateAuthority(certificateAuthorityName)
              .build();

      // Check if the CA is enabled.
      State caState =
          certificateAuthorityServiceClient
              .getCertificateAuthority(certificateAuthorityNameParent)
              .getState();
      if (caState == State.ENABLED) {
        System.out.println(
            "Please disable the Certificate Authority before deletion ! Current state: " + caState);
        return;
      }

      // Create the DeleteCertificateAuthorityRequest.
      // Setting the setIgnoreActiveCertificates() to true, will delete the CA
      // even if it contains active certificates. Care should be taken to re-anchor
      // the certificates to new CA before deleting.
      DeleteCertificateAuthorityRequest deleteCertificateAuthorityRequest =
          DeleteCertificateAuthorityRequest.newBuilder()
              .setName(certificateAuthorityNameParent.toString())
              .setIgnoreActiveCertificates(false)
              .build();

      // Delete the Certificate Authority.
      ApiFuture<Operation> futureCall =
          certificateAuthorityServiceClient
              .deleteCertificateAuthorityCallable()
              .futureCall(deleteCertificateAuthorityRequest);
      Operation response = futureCall.get();

      if (response.hasError()) {
        System.out.println("Error while deleting Certificate Authority !" + response.getError());
        return;
      }

      // Check if the CA has been deleted.
      caState =
          certificateAuthorityServiceClient
              .getCertificateAuthority(certificateAuthorityNameParent)
              .getState();
      if (caState == State.DELETED) {
        System.out.println(
            "Successfully deleted Certificate Authority : " + certificateAuthorityName);
      } else {
        System.out.println(
            "Unable to delete Certificate Authority. Please try again ! Current state: " + caState);
      }
    }
  }
}

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


def delete_certificate_authority(
    project_id: str, location: str, ca_pool_name: str, ca_name: str
) -> None:
    """
    Delete the Certificate Authority from the specified CA pool.
    Before deletion, the CA must be disabled and must not contain any active certificates.

    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: the name of the CA pool under which the CA is present.
        ca_name: the name of the CA to be deleted.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()
    ca_path = caServiceClient.certificate_authority_path(
        project_id, location, ca_pool_name, ca_name
    )

    # Check if the CA is enabled.
    ca_state = caServiceClient.get_certificate_authority(name=ca_path).state
    if ca_state != privateca_v1.CertificateAuthority.State.DISABLED:
        print(
            "Please disable the Certificate Authority before deletion ! Current state:",
            ca_state,
        )
        raise RuntimeError(
            f"You can only delete disabled Certificate Authorities. "
            f"{ca_name} is not disabled!"
        )

    # Create the DeleteCertificateAuthorityRequest.
    # Setting the ignore_active_certificates to True will delete the CA
    # even if it contains active certificates. Care should be taken to re-anchor
    # the certificates to new CA before deleting.
    request = privateca_v1.DeleteCertificateAuthorityRequest(
        name=ca_path, ignore_active_certificates=False
    )

    # Delete the Certificate Authority.
    operation = caServiceClient.delete_certificate_authority(request=request)
    result = operation.result()

    print("Operation result", result)

    # Get the current CA state.
    ca_state = caServiceClient.get_certificate_authority(name=ca_path).state

    # Check if the CA has been deleted.
    if ca_state == privateca_v1.CertificateAuthority.State.DELETED:
        print("Successfully deleted Certificate Authority:", ca_name)
    else:
        print(
            "Unable to delete Certificate Authority. Please try again ! Current state:",
            ca_state,
        )

Ablaufdatum einer gelöschten Zertifizierungsstelle prüfen

So sehen Sie, wann eine CA endgültig gelöscht wird:

Console

  1. Klicken Sie auf den Tab CA-Poolmanager.
  2. Klicken Sie auf den Namen des CA-Pools, der die gelöschte CA enthielt.

Das Ablaufdatum der CA finden Sie in der Tabelle auf der Seite CA-Pool.

Ablaufdatum einer gelöschten Zertifizierungsstelle ansehen

gcloud

Führen Sie den folgenden Befehl aus, um die erwartete Löschzeit für eine CA zu prüfen:

gcloud privateca roots describe CA_ID \
    --pool=POOL_ID \
    --location=LOCATION \
    --format="value(expireTime.date())"

Ersetzen Sie Folgendes:

  • CA_ID: der Name der CA.
  • POOL_ID: der Name des CA-Pools, der die CA enthielt.
  • LOCATION: der Standort des CA-Pools. Eine vollständige Liste der Standorte finden Sie unter Standorte.

Der Befehl gibt das erwartete Datum und die erwartete Uhrzeit zurück, zu der der CA-Dienst die CA löscht.

2020-08-14T19:28:39

Führen Sie den folgenden Befehl aus, um zu prüfen, ob die CA endgültig gelöscht wurde:

gcloud privateca roots describe CA_ID --pool=POOL_ID --location=LOCATION

Wenn die Zertifizierungsstelle erfolgreich gelöscht wurde, gibt der Befehl den folgenden Fehler zurück.

ERROR: (gcloud.privateca.roots.describe) NOT_FOUND: Resource 'projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities/CA_ID' was not found

Nächste Schritte