Revocar certificados

En esta página, se explica cómo revocar certificados.

Certificate Authority Service admite la revocación de certificados con la publicación periódica de listas de revocación de certificados (CRL). Solo puedes revocar certificados emitidos por grupos de AC en el nivel empresarial.

Antes de comenzar

Asegúrate de tener el rol de administrador de operaciones de Certificate Authority Service (roles/privateca.caManager) o de administrador de CA Service (roles/privateca.admin) de Identity and Access Management (IAM). Si deseas obtener más información sobre las funciones predefinidas de IAM para el servicio de CA, consulta Control de acceso con IAM.

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

Habilitar la publicación de la CRL

Para revocar los certificados emitidos por un grupo de AC, debes habilitar la publicación de la CRL en ese grupo. Puedes habilitar la publicación de la CRL mientras creas un grupo de AC. Si se inhabilita inicialmente, puedes habilitar la publicación de la CRL más adelante.

Después de habilitar la publicación de la CRL, se publica una nueva todos los días y es válida durante 7 días. También se publica una CRL nueva dentro de los 15 minutos posteriores a cualquier revocación de certificado.

Para habilitar la publicación de la CRL en un grupo de AC, haz lo siguiente:

Console

  1. Ve a la página Certificate Authority Service en la consola de Google Cloud.

    Certificate Authority Service

  2. Haz clic en el nombre de una AC del grupo de AC que quieres modificar.

  3. En la página Autoridad certificadora, haz clic en Editar política.

  4. En el panel izquierdo que aparece, haz clic en el botón de activación Publicar la URL de acceso de la lista de revocación de certificados en los certificados emitidos en Opciones de publicación.

gcloud

Ejecuta el siguiente comando:

gcloud privateca pools update POOL_ID \
  --publish-crl

Reemplaza POOL_ID por el nombre del grupo de AC.

Para obtener más información sobre el comando gcloud privateca pools update, consulta gcloud privateca pool update.

El Servicio de CA aplica un límite de 500,000 certificados revocados no vencidos por CRL.

Revocar un certificado

El servicio de CA permite revocar certificados por número de serie o nombre de recurso, y también acepta un motivo opcional. Después de que se revoca un certificado, su número de serie y el motivo de revocación aparecerán en todas las CRL futuras hasta que el certificado llegue a su fecha de vencimiento. También se genera una CRL fuera de banda dentro de los 15 minutos posteriores a la revocación.

Para revocar un certificado, sigue estos pasos:

Console

  1. Ve a la página Certificate Authority Service en la consola de Google Cloud.

    Ir a Certificate Authority Service

  2. Haz clic en la pestaña Administrador de certificados privados.
  3. En la lista de certificados, haz clic en Ver más en la fila del certificado que deseas borrar.
  4. Haz clic en Revocar.
  5. En el cuadro de diálogo que se abre, haz clic en Confirmar.

gcloud

  • Para revocar un certificado con su nombre de recurso, ejecuta el siguiente comando:

    gcloud privateca certificates revoke \
      --certificate CERT_ID \
      --issuer-pool POOL_ID \
      --reason REVOCATION_REASON
    

    Reemplaza lo siguiente:

    • CERT_ID: El identificador único del certificado que deseas revocar.
    • POOL_ID: Es el nombre del grupo de AC que emitió el certificado.
    • REVOCATION_REASON: Es el motivo por el que se revoca el certificado.

    La marca --reason es opcional. Para obtener más información sobre esta marca, consulta --reason o usa el siguiente comando gcloud con la marca --help:

    gcloud privateca certificates revoke --help
    

    Para obtener más información sobre el comando gcloud privateca certificates revoke, consulta revocación de certificados privados de gcloud.

  • Para revocar un certificado con su número de serie, ejecuta el siguiente comando:

    gcloud privateca certificates revoke \
      --serial-number SERIAL_NUMBER \
      --issuer-pool POOL_ID \
      --reason REVOCATION_REASON
    

    Reemplaza lo siguiente:

    • SERIAL_NUMBER: Es el número de serie del certificado.
    • POOL_ID: Es el nombre del grupo de AC que emitió el certificado.
    • REVOCATION_REASON: Es el motivo por el que se revoca el certificado.

    Para obtener más información sobre el comando gcloud privateca certificates revoke, consulta revocación de certificados privados de gcloud.

    Cuando se te solicite confirmar, puedes hacerlo ingresando “Y”:

    You are about to revoke Certificate [projects/PROJECT_ID/locations/CA_POOL_REGION/caPools/POOL_ID/certificates/CERT_ID]
    
    Do you want to continue? (Y/n) Y
    Revoked certificate [projects/PROJECT_ID/locations/CA_POOL_REGION/caPools/POOL_ID/certificates/CERT_ID] at DATE_TIME.
    
    

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

// Revoke an issued certificate. Once revoked, the certificate will become invalid
// and will expire post its lifetime.
func revokeCertificate(
	w io.Writer,
	projectId string,
	location string,
	caPoolId string,
	certId 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 CA Pool id in which the certificate exists.
	// certId := "certificate"			// A unique name for the certificate.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	fullCertName := fmt.Sprintf("projects/%s/locations/%s/caPools/%s/certificates/%s", projectId, location,
		caPoolId, certId)

	// Create the RevokeCertificateRequest and specify the appropriate revocation reason.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#RevokeCertificateRequest.
	req := &privatecapb.RevokeCertificateRequest{
		Name:   fullCertName,
		Reason: privatecapb.RevocationReason_PRIVILEGE_WITHDRAWN,
	}

	_, err = caClient.RevokeCertificate(ctx, req)
	if err != nil {
		return fmt.Errorf("RevokeCertificate failed: %w", err)
	}

	fmt.Fprintf(w, "Certificate %s revoked", certId)

	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.Certificate;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.CertificateName;
import com.google.cloud.security.privateca.v1.RevocationReason;
import com.google.cloud.security.privateca.v1.RevokeCertificateRequest;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class RevokeCertificate {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // 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: Id for the CA pool which contains the certificate.
    // certificateName: Name of the certificate to be revoked.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    String certificateName = "certificate-name";
    revokeCertificate(project, location, poolId, certificateName);
  }

  // Revoke an issued certificate. Once revoked, the certificate will become invalid and will expire
  // post its lifetime.
  public static void revokeCertificate(
      String project, String location, String poolId, String certificateName)
      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 Certificate Name.
      CertificateName certificateNameParent =
          CertificateName.newBuilder()
              .setProject(project)
              .setLocation(location)
              .setCaPool(poolId)
              .setCertificate(certificateName)
              .build();

      // Create Revoke Certificate Request and specify the appropriate revocation reason.
      RevokeCertificateRequest revokeCertificateRequest =
          RevokeCertificateRequest.newBuilder()
              .setName(certificateNameParent.toString())
              .setReason(RevocationReason.PRIVILEGE_WITHDRAWN)
              .build();

      // Revoke certificate.
      ApiFuture<Certificate> response =
          certificateAuthorityServiceClient
              .revokeCertificateCallable()
              .futureCall(revokeCertificateRequest);
      Certificate certificateResponse = response.get();

      System.out.println("Certificate Revoked: " + certificateResponse.getName());
    }
  }
}

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 revoke_certificate(
    project_id: str,
    location: str,
    ca_pool_name: str,
    certificate_name: str,
) -> None:
    """
    Revoke an issued certificate. Once revoked, the certificate will become invalid and will expire post its lifetime.

    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: name for the CA pool which contains the certificate.
        certificate_name: name of the certificate to be revoked.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    # Create Certificate Path.
    certificate_path = caServiceClient.certificate_path(
        project_id, location, ca_pool_name, certificate_name
    )

    # Create Revoke Certificate Request and specify the appropriate revocation reason.
    request = privateca_v1.RevokeCertificateRequest(
        name=certificate_path, reason=privateca_v1.RevocationReason.PRIVILEGE_WITHDRAWN
    )
    result = caServiceClient.revoke_certificate(request=request)

    print("Certificate revoke result:", result)

¿Qué sigue?