Borra autoridades certificadoras

Certificate Authority Service te permite borrar una autoridad certificadora (CA) existente. La CA se borrará de forma permanente luego de un período de gracia de 30 días desde el momento en que se inicie el proceso de eliminación. Después del período de gracia, CA Service borra de forma permanente la CA y todos los artefactos anidados, como los certificados y las listas de revocación de certificados (CRL).

No se borran los recursos Google Cloud administrados por el cliente que usaba la CA borrada, como los buckets de Cloud Storage o las claves de Cloud Key Management Service. Para obtener más información sobre los recursos administrados por Google y por el cliente, consulta Administra recursos.

No se factura una CA borrada durante el período de gracia. Sin embargo, si restableces la CA, se te cobrará según el nivel de facturación de la CA por el tiempo que esta existió en el estado DELETED.

Antes de comenzar

  • Asegúrate de tener el rol de Identity and Access Management (IAM) de administrador de operaciones del servicio de AC (roles/privateca.caManager) o de administrador del servicio de AC (roles/privateca.admin). Para obtener más información sobre los roles de IAM predefinidos para el servicio de CA, consulta Control de acceso con IAM.

    Para obtener información sobre cómo otorgar un rol de IAM, consulta Cómo otorgar un solo rol.

  • Asegúrate de que la CA cumpla con las siguientes condiciones:

    • La CA no debe contener certificados activos. Un certificado se considera activo cuando cumple con las siguientes condiciones:

    • El certificado tiene fechas de inicio y finalización válidas.

    • El certificado no se revocó.

    • El dispositivo o sistema que usa el certificado confía en la autoridad certificadora (CA) que lo emitió.

    Antes de borrar la CA, asegúrate de que se revoquen todos los certificados activos que haya emitido. No puedes revocar certificados de una CA borrada.

Borra una CA

Para iniciar el borrado de la CA, haz lo siguiente:

Console

  1. Ve a la página Entidades certificadoras en la consola de Google Cloud .

    Ir a Autoridades certificadoras

  2. En la lista de CAs, selecciona la que deseas borrar.
  3. Haz clic en Borrar. Aparecerá el diálogo Borrar entidad de certificación.
  4. Opcional: Selecciona una o ambas casillas de verificación siguientes si se aplican las condiciones a tu caso:
    • Borrar esta CA aunque haya certificados activos

      Esta opción te permite borrar una CA con certificados activos. Borrar una CA con certificados activos puede provocar que fallen los sitios web, las aplicaciones o los sistemas que dependen de esos certificados. Te recomendamos que revoques todos los certificados activos emitidos por una CA antes de borrarla.

    • Omitir el período de gracia de 30 días y borrar esta CA de inmediato

      El período de gracia de 30 días te permite revocar todos los certificados emitidos por esta CA y verificar que ningún sistema dependa de ella. Te recomendamos que uses esta opción solo en entornos de prueba o que no sean de producción para evitar posibles interrupciones y pérdida de datos.

  5. Haz clic en Confirmar.

gcloud

  1. Verifica el estado de la CA para asegurarte de que esté inhabilitada. Solo puedes borrar las entidades certificadoras que se encuentran en el estado DISABLED.

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

    Reemplaza lo siguiente:

    • CA_ID: Es el identificador único de la CA.
    • POOL_ID: Es el nombre del grupo de CA que contiene la CA.
    • LOCATION: Es la ubicación del grupo de AC. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.

    Para obtener más información sobre el comando gcloud privateca roots describe, consulta gcloud privateca roots describe.

  2. Si la CA no está inhabilitada, ejecuta el siguiente comando para inhabilitarla.

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

    Para obtener más información sobre el comando gcloud privateca roots disable, consulta gcloud privateca roots disable.

  3. Borra la CA.

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

    Puedes borrar la CA incluso si tiene certificados activos. Para ello, incluye la marca --ignore-active-certificates en tu comando gcloud.

    Para obtener más información sobre el comando gcloud privateca roots delete, consulta gcloud privateca roots delete.

  4. Cuando se te solicite, confirma que deseas borrar la CA.

    Después de la confirmación, se programa la eliminación de la CA y comienza el período de gracia de 30 días. El comando genera la fecha y hora esperadas en las que se borrará 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.
    

Go

Para autenticarte en CA Service, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en CA Service, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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 autenticarte en CA Service, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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,
        )

Verifica la fecha de vencimiento de una CA borrada

Para ver cuándo se borrará una CA de forma permanente, haz lo siguiente:

Console

  1. Haz clic en la pestaña Administrador de grupos de CA.
  2. Haz clic en el nombre del grupo de CA que contenía la CA que borraste.

Puedes ver la fecha de vencimiento de la CA en la tabla de la página Grupo de CA.

Consulta la fecha de vencimiento de una AC borrada.

gcloud

Para verificar la hora de eliminación esperada de una CA, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • CA_ID: Es el nombre de la CA.
  • POOL_ID: Es el nombre del grupo de CA que contenía la CA.
  • LOCATION: Es la ubicación del grupo de AC. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.

El comando devuelve la fecha y hora esperadas en que el servicio de la CA borra la CA.

2020-08-14T19:28:39

Para verificar que la CA se haya borrado de forma permanente, ejecuta el siguiente comando:

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

Si la CA se borra correctamente, el comando devolverá el siguiente error.

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

¿Qué sigue?