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 Listas de revocación de certificados (CRL). Solo puedes revocar los certificados emitidos por Grupos de AC en el nivel Enterprise.

Antes de comenzar

Asegúrate de tener el Administrador de operaciones de Certificate Authority Service (roles/privateca.caManager) o el administrador del servicio de CA (roles/privateca.admin) Identity and Access Management (IAM). 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 CRL en el grupo de AC. Puedes habilitar la publicación de CRL cuando creas un grupo de AC. Si 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 dentro de los 15 minutos posteriores a cualquier nueva revocación de certificados.

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 (Servicio de autoridad certificadora) 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 gcloud privateca groups update.

CA Service aplica un límite de 500,000 cuentas certificados por CRL.

Cómo revocar un certificado

El servicio de CA permite revocar certificados por número de serie o recurso y acepta un motivo opcional. Después de revocar un certificado, su valor de y el motivo de revocación en todas las CRL futuras hasta que el certificado de Google llegue a 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 de Certificate Authority Service 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 de el certificado que quieres 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: 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 gcloud privatecacertificates revoca

  • 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” para hacerlo:

    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 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?