Supprimer des autorités de certification

Certificate Authority Service vous permet de supprimer une autorité de certification (CA) existante. L'autorité de certification est définitivement supprimée au bout de 30 jours à compter du début du processus de suppression. Une fois le délai de grâce écoulé, le service d'autorité de certification supprime définitivement l'autorité de certification et tous les artefacts imbriqués, tels que les certificats et les listes de révocation de certificats (LRC).

Les ressources Google Cloud gérées par le client qui étaient utilisées par l'autorité de certification supprimée, telles que les buckets Cloud Storage ou les clés Cloud Key Management Service, ne sont pas supprimées. Pour en savoir plus sur les ressources gérées par Google et gérées par le client, consultez Gérer les ressources.

Une autorité de certification supprimée n'est pas facturée pendant le délai de grâce. Toutefois, si vous restaurez l'autorité de certification, le niveau de facturation de l'autorité de certification vous sera facturé pendant la période où elle était dans l'état DELETED.

Avant de commencer

  • Assurez-vous de disposer du rôle IAM (Identity and Access Management) "Gestionnaire des opérations du service d'autorité de certification" (roles/privateca.caManager) ou "Administrateur du service d'autorité de certification" (roles/privateca.admin). Pour en savoir plus sur les rôles IAM prédéfinis pour le service CA, consultez la page Contrôle des accès avec IAM.

    Pour en savoir plus sur l'attribution d'un rôle IAM, consultez la section Attribuer un rôle unique.

  • Assurez-vous que l'autorité de certification remplit les conditions suivantes:

    • L'autorité de certification ne doit pas contenir de certificats actifs. Un certificat est considéré comme actif lorsqu'il remplit les conditions suivantes:

      • Les dates de début et de fin du certificat sont valides.
      • Le certificat n'a pas été révoqué.
      • L'appareil ou le système qui utilise le certificat fait confiance à l'autorité de certification (CA) qui l'a délivré.

    Avant de supprimer l'autorité de certification, assurez-vous que tous les certificats actifs qu'elle a émis sont révoqués. Vous ne pouvez pas révoquer les certificats d'une autorité de certification supprimée.

Supprimer une autorité de certification

Pour lancer la suppression de l'autorité de certification, procédez comme suit:

Console

  1. Accédez à la page Autorités de certification dans la console Google Cloud.

    Accéder à "Autorités de certification"

  2. Dans la liste des autorités de certification, sélectionnez celle que vous souhaitez supprimer.
  3. Cliquez sur Supprimer. La boîte de dialogue Supprimer l'autorité de certification s'affiche.
  4. Facultatif: cochez l'une ou les deux cases suivantes si les conditions s'appliquent à vous :
    • Supprimer cette autorité de certification, même s'il existe des certificats actifs

      Cette option vous permet de supprimer une autorité de certification avec des certificats actifs. La suppression d'une autorité de certification avec des certificats actifs peut entraîner l'échec des sites Web, applications ou systèmes qui s'appuient sur ces certificats. Nous vous recommandons de révoquer tous les certificats actifs émis par une autorité de certification avant de la supprimer.

    • Ignorer le délai de grâce de 30 jours et supprimer immédiatement cette autorité de certification

      Le délai de grâce de 30 jours vous permet de révoquer tous les certificats émis par cette autorité de certification et de vérifier qu'aucun système ne dépend de cette autorité de certification. Nous vous recommandons de n'utiliser cette option que dans des environnements hors production ou de test afin d'éviter les pannes et les pertes de données potentielles.

  5. Cliquez sur Confirmer.

gcloud

  1. Vérifiez l'état de l'autorité de certification pour vous assurer qu'elle est désactivée. Vous ne pouvez supprimer que les autorités de certification dont l'état est DISABLED.

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

    Remplacez les éléments suivants :

    • CA_ID: identifiant unique de l'autorité de certification.
    • POOL_ID: nom du pool d'autorités de certification contenant l'autorité de certification.

    Pour en savoir plus sur la commande gcloud privateca roots describe, consultez gcloud privateca roots describe.

  2. Si l'autorité de certification n'est pas désactivée, exécutez la commande suivante pour la désactiver.

    gcloud privateca roots disable CA_ID --pool=POOL_ID
    

    Pour en savoir plus sur la commande gcloud privateca roots disable, consultez gcloud privateca roots disable.

  3. Supprimez l'autorité de certification.

    gcloud privateca roots delete CA_ID --pool=POOL_ID
    

    Vous pouvez supprimer l'autorité de certification même si elle dispose de certificats actifs en incluant l'indicateur --ignore-active-certificates dans votre commande gcloud.

    Pour en savoir plus sur la commande gcloud privateca roots delete, consultez gcloud privateca roots delete.

  4. Lorsque vous y êtes invité, confirmez la suppression de l'autorité de certification.

    Une fois la confirmation effectuée, la suppression de l'autorité de certification est planifiée et le délai de grâce de 30 jours commence. La commande affiche la date et l'heure prévues de suppression de l'autorité de certification.

    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

Pour vous authentifier auprès du service d'autorité de certification, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Pour vous authentifier auprès du service d'autorité de certification, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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

Pour vous authentifier auprès du service d'autorité de certification, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Vérifier la date d'expiration d'une autorité de certification supprimée

Pour savoir quand une autorité de certification sera définitivement supprimée, procédez comme suit:

Console

  1. Cliquez sur l'onglet Gestionnaire de pool d'autorités de certification.
  2. Cliquez sur le nom du pool d'autorités de certification qui contenait l'autorité de certification que vous avez supprimée.

Vous pouvez consulter la date d'expiration de la CA dans le tableau de la page Pool de CA.

Afficher la date d&#39;expiration d&#39;une autorité de certification supprimée

gcloud

Pour vérifier l'heure de suppression prévue d'une autorité de certification, exécutez la commande suivante:

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

Remplacez les éléments suivants :

  • CA_ID: nom de l'autorité de certification.
  • POOL_ID: nom du pool d'autorités de certification qui contenait l'autorité de certification.

La commande renvoie la date et l'heure prévues à laquelle le service d'autorité de certification supprimera l'autorité de certification.

2020-08-14T19:28:39

Pour vérifier que l'autorité de certification a été supprimée définitivement, exécutez la commande suivante:

gcloud privateca roots describe CA_ID --pool=POOL_ID

Si la CA est supprimée, la commande renvoie l'erreur suivante.

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

Étape suivante