Revocar certificados

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

El servicio de autoridad de certificación admite la revocación de certificados mediante 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 Enterprise.

Antes de empezar

Asegúrate de tener el rol de gestión de operaciones de Servicio de Autoridades de Certificación (roles/privateca.caManager) o el de administrador de Servicio de Autoridades de Certificación (roles/privateca.admin) en Gestión de Identidades y Accesos (IAM). Para obtener más información sobre los roles de gestión de identidades y accesos predefinidos para el servicio de CA, consulta el artículo sobre el control de acceso con gestión de identidades y accesos.

Para obtener información sobre cómo conceder un rol de gestión de identidades y accesos, consulta el artículo sobre cómo conceder un solo rol.

Habilitar la publicación de listas de revocación de certificados

Para revocar los certificados emitidos por un grupo de ACs, debes habilitar la publicación de CRLs en el grupo de ACs. Puedes habilitar la publicación de CRLs al crear un grupo de CAs. Si está inhabilitada inicialmente, puedes habilitar la publicación de CRL más adelante.

Después de habilitar la publicación de CRLs, se publicará una nueva CRL cada día, que tendrá una validez de 7 días. También se publica una nueva CRL en un plazo de 15 minutos después de que se revoque un certificado.

Los certificados contienen una extensión de punto de distribución de la lista de revocación de certificados (CRL) que especifica dónde se puede encontrar la información de la CRL del certificado. De forma predeterminada, cuando habilitas la publicación de CRLs, el servicio de CA rellena la extensión CDP de todos los certificados emitidos por la CA con la ubicación de publicación de Cloud Storage que usa la CA. Para definir tus propios enlaces de forma que aparezcan en esta extensión de certificado, define el valor de UserDefinedAccessUrls. Para mantener el enlace predeterminado a la ubicación de publicación de Cloud Storage y añadir sus propios enlaces, añada el enlace de Cloud Storage a la lista de enlaces que especifique.

Para habilitar la publicación de listas de revocación de certificados en un grupo de CAs, siga estos pasos:

Consola

  1. Ve a la página Servicio de autoridad de certificación en la consola deGoogle Cloud .

    Servicio de Autoridades de Certificación

  2. Haga clic en la pestaña Administrador de grupos de ACs.

  3. Haga clic en el conjunto de ACs que quiera editar o en el conjunto de ACs que tenga la AC que quiera editar.

  4. En la página Grupo de autoridades de certificación, haga clic en .

    Editar.

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

  6. Haz clic en el interruptor Publicar CRL en el segmento de GCS de las autoridades de certificación de este grupo.

gcloud

Ejecuta el siguiente comando:

gcloud privateca pools update POOL_ID --location LOCATION --publish-crl

Haz los cambios siguientes:

  • POOL_ID: nombre del grupo de autoridades de certificación.
  • LOCATION: la ubicación del grupo de autoridades de certificación. Para ver la lista completa de ubicaciones, consulta Ubicaciones.

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

El servicio de AC aplica un límite de 500.000 certificados revocados no caducados por CRL.

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. Una vez 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 llegue a su fecha de vencimiento. También se genera una CRL fuera de banda en un plazo de 15 minutos tras la revocación.

Para revocar un certificado, sigue estos pasos:

Consola

  1. Ve a la página Servicio de autoridad de certificación en la consola de Google Cloud .

    Ir al Servicio de Autoridades de Certificación

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

gcloud

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

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

    Haz los cambios siguientes:

    • CERT_ID: identificador único del certificado que quieres revocar.
    • POOL_ID: el nombre del grupo de ACs que ha emitido el certificado.
    • ISSUER_LOCATION: la ubicación del grupo de ACs emisoras.
    • REVOCATION_REASON: 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 privateca certificates revoke.

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

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

    Haz los cambios siguientes:

    • SERIAL_NUMBER: número de serie del certificado.
    • POOL_ID: el nombre del grupo de autoridades de certificación que emitió el certificado.
    • ISSUER_LOCATION: la ubicación del grupo de ACs emisoras.
    • REVOCATION_REASON: el motivo por el que se revoca el certificado.

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

    Cuando se te pida que confirmes la acción, puedes hacerlo introduciendo "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. Para obtener más información, consulta el artículo Configurar la autenticación en 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. Para obtener más información, consulta el artículo Configurar la autenticación en 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. Para obtener más información, consulta el artículo Configurar la autenticación en 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)

Siguientes pasos