Eliminare le autorità di certificazione

Certificate Authority Service ti consente di eliminare un'autorità di certificazione (CA) esistente. La CA viene eliminata definitivamente dopo un periodo di tolleranza di 30 giorni dall'avvio del processo di eliminazione. Al termine del periodo di tolleranza, il servizio CA elimina definitivamente l'autorità di certificazione e tutti gli elementi nidificati, come i certificati e gli elenchi di revoche dei certificati (CRL).

Le risorse Google Cloud gestite dal cliente che erano in uso dalla CA eliminata, ad esempio i bucket Cloud Storage o le chiavi Cloud Key Management Service, non vengono eliminate. Per ulteriori informazioni sulle risorse gestite da Google e gestite dal cliente, vedi Gestire le risorse.

Una CA eliminata non viene fatturata durante il periodo di tolleranza. Tuttavia, se ripristina il CA, ti verrà addebitato il livello di fatturazione del CA per il periodo di tempo in cui il CA è stato attivo nello stato DELETED.

Prima di iniziare

  • Assicurati di disporre del ruolo di Identity and Access Management (IAM) Responsabile operativo servizio CA (roles/privateca.caManager) o Amministratore servizio CA (roles/privateca.admin). Per ulteriori informazioni sui ruoli IAM predefiniti per il servizio CA, consulta Controllo dell'accesso con IAM.

    Per informazioni sulla concessione di un ruolo IAM, consulta Concedere un singolo ruolo.

  • Assicurati che la CA soddisfi le seguenti condizioni:

    • La CA non deve contenere certificati attivi. Un certificato è considerato attivo se soddisfa le seguenti condizioni:

      • Il certificato contiene date "da" e "a" valide.
      • Il certificato non è stato revocato.
      • Il dispositivo o il sistema che utilizza il certificato considera attendibile l'autorità di certificazione (CA) che lo ha emesso.

    Prima di eliminare la CA, assicurati che tutti i certificati attivi che ha rilasciato siano stati revocati. Non puoi revocare i certificati da una CA eliminata.

Eliminare una CA

Per avviare l'eliminazione della CA:

Console

  1. Vai alla pagina Autorità di certificazione nella console Google Cloud.

    Vai ad Autorità di certificazione

  2. Nell'elenco delle CA, seleziona quella che vuoi eliminare.
  3. Fai clic su Elimina. Viene visualizzata la finestra di dialogo Elimina autorità di certificazione.
  4. (Facoltativo) Seleziona una o entrambe le seguenti caselle di controllo se le condizioni si applicano al tuo caso:
    • Eliminare questa CA, anche se ci sono certificati attivi

      Questa opzione ti consente di eliminare una CA con certificati attivi. L'eliminazione di una CA con certificati attivi potrebbe causare il malfunzionamento di siti web, applicazioni o sistemi che si basano su questi certificati. Ti consigliamo di revocare tutti i certificati attivi emessi da una CA prima di eliminarla.

    • Salta il periodo di tolleranza di 30 giorni ed elimina questa CA immediatamente

      Il periodo di tolleranza di 30 giorni ti consente di revocare tutti i certificati emessi da questa CA e di verificare che nessun sistema dipenda da questa CA. Ti consigliamo di utilizzare questa opzione solo in ambienti di test o non di produzione per evitare potenziali interruzioni e perdite di dati.

  5. Fai clic su Conferma.

gcloud

  1. Controlla lo stato della CA per assicurarti che sia disattivata. Puoi eliminare solo le CA che si trovano nello stato DISABLED.

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

    Sostituisci quanto segue:

    • CA_ID: l'identificatore univoco della CA.
    • POOL_ID: il nome del pool di CA che contiene la CA.

    Per ulteriori informazioni sul comando gcloud privateca roots describe, consulta gcloud privateca roots describe.

  2. Se la CA non è disattivata, esegui il seguente comando per disattivarla.

    gcloud privateca roots disable CA_ID --pool=POOL_ID
    

    Per ulteriori informazioni sul comando gcloud privateca roots disable, consulta gcloud privateca roots disable.

  3. Elimina la CA.

    gcloud privateca roots delete CA_ID --pool=POOL_ID
    

    Puoi eliminare la CA anche se ha certificati attivi includendo il flag --ignore-active-certificates nel comando gcloud.

    Per ulteriori informazioni sul comando gcloud privateca roots delete, consulta gcloud privateca roots delete.

  4. Quando richiesto, conferma di voler eliminare la CA.

    Dopo la conferma, l'eliminazione della CA viene pianificata e inizia il periodo di tolleranza di 30 giorni. Il comando restituisce la data e l'ora previste in cui verrà eliminata la CA.

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

Vai

Per autenticarti al servizio CA, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per autenticarti al servizio CA, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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

Per autenticarti al servizio CA, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Controllare la data di scadenza di una CA eliminata

Per sapere quando una CA verrà eliminata definitivamente:

Console

  1. Fai clic sulla scheda Gestore pool di CA.
  2. Fai clic sul nome del pool di CA contenente la CA che hai eliminato.

Puoi visualizzare la data di scadenza della CA nella tabella della pagina Pool di CA.

Visualizza la data di scadenza di un certificato CA eliminato.

gcloud

Per controllare la data di eliminazione prevista di una CA, esegui il seguente comando:

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

Sostituisci quanto segue:

  • CA_ID: il nome della CA.
  • POOL_ID: il nome del pool di CA che conteneva la CA.

Il comando restituisce la data e l'ora previste in cui il servizio CA elimina la CA.

2020-08-14T19:28:39

Per verificare che la CA sia stata eliminata definitivamente, esegui il seguente comando:

gcloud privateca roots describe CA_ID --pool=POOL_ID

Se la CA viene eliminata correttamente, il comando restituisce il seguente errore.

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

Passaggi successivi