Revocar certificados

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

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

Antes de comenzar

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

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

Habilita la publicación de CRL

Para revocar los certificados emitidos por un grupo de AC, debes habilitar la publicación de la CRL en el grupo de AC. Puedes habilitar la publicación de CRL cuando creas un grupo de AC. Si está inhabilitada inicialmente, puedes habilitar la publicación de CRL más adelante.

Después de habilitar la publicación de CRL, se publica una nueva CRL a diario y es válida durante 7 días. También se publica una CRL nueva en un plazo de 15 minutos a partir de cualquier revocación de certificado nueva.

Para habilitar la publicación de 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 la pestaña Administrador de grupos de AC.

  3. Haz clic en el grupo de AC que deseas editar o en el grupo de AC que tiene la AC que deseas editar.

  4. En la página Grupo de AC, haz clic en Editar.

  5. Haz clic en Siguiente hasta llegar a la sección Configurar opciones de publicación.

  6. Haz clic en el botón de activación Publicar la CRL en el bucket de GCS para las AC de este grupo.

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 Actualización de grupos de privateca de gcloud.

El servicio de AC aplica un límite de 500,000 certificados revocados sin vencer por CRL.

Cómo revocar un certificado

El servicio de AC 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 la revocación aparecen en todas las CRL futuras hasta que el certificado alcanza su fecha de vencimiento. También se genera una CRL fuera de banda en un plazo de 15 minutos después de 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 Private certificate manager.
  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: Es el identificador único del certificado que deseas revocar.
    • POOL_ID: Es el nombre del grupo de AC que emitió el certificado.
    • REVOCATION_REASON: El motivo por el que se revocó 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 gcloud privateca certificates revoke.

  • 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: El motivo por el que se revocó el certificado.

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

    Cuando se te solicite confirmar, ingresa "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 el servicio de AC, 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 el servicio de AC, 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 el servicio de AC, 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?