Elimine autoridades de certificação

O Certificate Authority Service permite-lhe eliminar uma autoridade de certificação (AC) existente. O CA é eliminado permanentemente após um período de tolerância de 30 dias a partir do momento em que o processo de eliminação é iniciado. Após o período de tolerância, o serviço de AC elimina permanentemente a AC e todos os artefactos aninhados, como certificados e listas de revogação de certificados (LRCs).

Os recursos Google Cloud geridos pelo cliente que estavam a ser usados pela AC eliminada, como contentores do Cloud Storage ou chaves do Cloud Key Management Service, não são eliminados. Para mais informações sobre os recursos geridos pela Google e pelo cliente, consulte o artigo Gerir recursos.

Não é cobrado nenhum valor por uma CA eliminada durante o período de tolerância. No entanto, se restaurar a CA, é-lhe cobrado o nível de faturação da CA durante o período em que a CA existiu no estado DELETED.

Antes de começar

  • Certifique-se de que tem a função de gestão de identidade e de acesso (IAM) de gestor de operações do serviço de AC (roles/privateca.caManager) ou administrador do serviço de AC (roles/privateca.admin). Para mais informações sobre as funções de IAM predefinidas para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.

    Para ver informações sobre como conceder uma função do IAM, consulte o artigo Conceder uma única função.

  • Certifique-se de que a AC cumpre as seguintes condições:

    • A CA não pode conter certificados ativos. Um certificado é considerado ativo quando cumpre as seguintes condições:

    • O certificado tem uma data "de" e "para" válida.

    • O certificado não foi revogado.

    • O dispositivo ou o sistema que usa o certificado confia na autoridade de certificação (AC) que emitiu o certificado.

    Antes de eliminar a AC, certifique-se de que todos os certificados ativos emitidos pela AC foram revogados. Não é possível revogar certificados de uma AC eliminada.

Elimine uma CA

Para iniciar a eliminação da AC, faça o seguinte:

Consola

  1. Aceda à página Autoridades de certificação na Google Cloud consola.

    Aceda a Autoridades de certificação

  2. Na lista de ACs, selecione a AC que quer eliminar.
  3. Clique em Eliminar. É apresentada a caixa de diálogo Eliminar autoridade de certificação.
  4. Opcional: selecione uma ou ambas as caixas de verificação seguintes se as condições se aplicarem a si:
    • Eliminar esta AC, mesmo que existam certificados ativos

      Esta opção permite-lhe eliminar uma AC com certificados ativos. A eliminação de uma AC com certificados ativos pode fazer com que os Websites, as aplicações ou os sistemas que dependem desses certificados falhem. Recomendamos que revogue todos os certificados ativos emitidos por uma AC antes de eliminar a AC.

    • Ignorar o período de tolerância de 30 dias e eliminar este CA imediatamente

      O período de tolerância de 30 dias dá-lhe tempo para revogar todos os certificados emitidos por esta AC e verificar se existem sistemas que dependem desta AC. Recomendamos que use esta opção apenas em ambientes de teste ou não de produção para evitar potenciais interrupções e perda de dados.

  5. Clique em Confirm.

gcloud

  1. Verifique o estado da CA para garantir que está desativada. Só pode eliminar as ACs que se encontram no estado DISABLED.

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

    Substitua o seguinte:

    • CA_ID: o identificador exclusivo da AC.
    • POOL_ID: o nome do grupo de ACs que contém a AC.
    • LOCATION: a localização do grupo de ACs. Para ver a lista completa de localizações, consulte o artigo Localizações.

    Para mais informações sobre o comando gcloud privateca roots describe, consulte gcloud privateca roots describe.

  2. Se a AC não estiver desativada, execute o seguinte comando para a desativar.

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

    Para mais informações sobre o comando gcloud privateca roots disable, consulte gcloud privateca roots disable.

  3. Elimine a CA.

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

    Pode eliminar a AC mesmo que esta tenha certificados ativos, incluindo a flag --ignore-active-certificates no comando gcloud.

    Para mais informações sobre o comando gcloud privateca roots delete, consulte gcloud privateca roots delete.

  4. Quando lhe for pedido, confirme que quer eliminar a AC.

    Após a confirmação, a CA é agendada para eliminação e o período de tolerância de 30 dias começa. O comando produz a data e a hora esperadas em que o CA vai ser eliminado.

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

Ir

Para se autenticar no serviço de AC, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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

Para se autenticar no serviço de AC, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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

Para se autenticar no serviço de AC, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento 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,
        )

Verifique a data de validade de uma AC eliminada

Para ver quando uma CA vai ser eliminada permanentemente, faça o seguinte:

Consola

  1. Clique no separador Gestor do conjunto de ACs.
  2. Clique no nome do conjunto de PAs que continha a PA que eliminou.

Pode ver a data de validade da AC na tabela na página Conjunto de ACs.

Veja a data de validade de uma CA eliminada.

gcloud

Para verificar o tempo de eliminação esperado de uma CA, execute o seguinte comando:

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

Substitua o seguinte:

  • CA_ID: o nome da CA.
  • POOL_ID: o nome do grupo de ACs que continha a AC.
  • LOCATION: a localização do grupo de ACs. Para ver a lista completa de localizações, consulte Localizações.

O comando devolve a data e a hora esperadas quando o serviço de AC elimina a AC.

2020-08-14T19:28:39

Para verificar se a AC foi eliminada permanentemente, execute o seguinte comando:

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

Se a AC for eliminada com êxito, o comando devolve o seguinte erro.

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

O que se segue?