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 Start des Löschvorgangs endgültig gelöscht. Nach dem Kulanzzeitraum löscht der CA Service die CA und alle verschachtelten Artefakte wie Zertifikate und Zertifikatsperrlisten (Certificate Revocation Lists, CRLs) endgültig.

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

Für eine gelöschte CA werden während des Kulanzzeitraums keine Kosten in Rechnung gestellt. Wenn Sie die CA jedoch wiederherstellen, werden Ihnen die Kosten für die Abrechnungsstufe der CA für die Zeit in Rechnung gestellt, in der sich die CA im Status DELETED befand.

Hinweis

  • 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 Service finden Sie unter Zugriffssteuerung mit IAM.

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

  • Die CA muss die folgenden Bedingungen erfüllen:

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

    • Das Zertifikat hat ein gültiges „Von“- und „Bis“-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 alle aktiven Zertifikate, die von der CA ausgestellt wurden, widerrufen werden. Zertifikate können nicht von einer gelöschten CA widerrufen werden.

CA löschen

So starten Sie das Löschen einer CA:

Console

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

    Zu den Zertifizierungsstellen

  2. Wählen Sie in der Liste der CAs die CA aus, die Sie löschen möchten.
  3. Klicken Sie auf „Löschen“ Löschen. Das Dialogfeld Delete Certificate Authority wird angezeigt.
  4. Optional: Klicken Sie eines oder beide der folgenden Kästchen an, 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 zu Fehlern bei Websites, Anwendungen oder Systemen kommen, die auf diese Zertifikate angewiesen sind. Wir empfehlen, alle aktiven Zertifikate, die von einer CA ausgestellt wurden, zu widerrufen, bevor Sie die CA 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 CA ausgestellten Zertifikate zu widerrufen und zu prüfen, ob Systeme von dieser CA abhängig sind. Wir empfehlen, diese Option nur in Nichtproduktions- oder Testumgebungen zu verwenden, um potenzielle Ausfälle und Datenverluste zu vermeiden.

  5. Klicken Sie auf Bestätigen.

gcloud

  1. Prüfen Sie, ob der Status der CA „Deaktiviert“ ist. Sie können nur CAs 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 ID 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 enthält. Fügen Sie dazu das Flag --ignore-active-certificates in den gcloud-Befehl ein.

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

  4. Bestätigen Sie, dass Sie die CA löschen möchten.

    Nach der Bestätigung wird die CA zum Löschen geplant und der 30-tägige Kulanzzeitraum beginnt. Der Befehl gibt das erwartete Datum und die erwartete Uhrzeit aus, zu der die CA 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 (Application Default Credentials, ADC) 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 (Application Default Credentials, ADC) 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 (Application Default Credentials, ADC) 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 CA 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.

In der Tabelle auf der Seite CA-Pool sehen Sie das Ablaufdatum der CA.

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 aus, zu der der CA Service 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 CA 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