Revogar certificados

Esta página explica como revogar certificados.

O Certificate Authority Service oferece suporte à revogação de certificados publicando periodicamente listas de revogação de certificados (CRLs). Só é possível revogar certificados emitidos por pools de ACs no nível Enterprise.

Antes de começar

Verifique se você tem o papel de administrador de operações do serviço de autoridade certificadora (roles/privateca.caManager) ou de administrador do serviço de CA (roles/privateca.admin) do Identity and Access Management (IAM). Para mais informações sobre os papéis predefinidos do IAM para o serviço de CA, consulte Controle de acesso com o IAM.

Para mais informações sobre como conceder um papel do IAM, consulte Conceder um único papel.

Ativar a publicação de CRL

Para revogar os certificados emitidos por um pool de ACs, ative a publicação de CRL no pool de ACs. É possível ativar a publicação de CRL ao criar um pool de ACs. Se for desativada inicialmente, você poderá ativar a publicação de CRL mais tarde.

Depois que você ativar a publicação de CRL, uma nova CRL será publicada diariamente e válida por 7 dias. Uma nova CRL também é publicada em até 15 minutos após qualquer nova revogação de certificado.

Para ativar a publicação de CRL em um pool de ACs, faça o seguinte:

Console

  1. Acesse a página Certificate Authority Service no console do Google Cloud.

    Certificate Authority Service

  2. Clique na guia Gerenciador de pool de CAs.

  3. Clique no pool de CA que você quer editar ou no que tem o CA que você quer editar.

  4. Na página Pool de AC, clique em Editar.

  5. Clique em Próxima até chegar à seção Configurar opções de publicação.

  6. Clique no botão de alternância Publicar CRL no bucket do GCS para CAs neste pool.

gcloud

Execute este comando:

gcloud privateca pools update POOL_ID \
  --publish-crl

Substitua POOL_ID pelo nome do pool de ACs.

Para mais informações sobre o comando gcloud privateca pools update, consulte gcloud privateca pools update.

O serviço de AC impõe um limite de 500.000 certificados revogados não expirados por CRL.

Revogar um certificado

O serviço de AC permite revogar certificados por número de série ou nome de recurso e também aceita um motivo opcional. Depois que um certificado é revogado, o número de série e o motivo da revogação aparecem em todas as CRLs futuras até que o certificado atinja a data de validade. Uma CRL fora de banda também é gerada 15 minutos após a revogação.

Para revogar um certificado, siga estas etapas:

Console

  1. Acesse a página Certificate Authority Service no console do Google Cloud.

    Acesse o Certificate Authority Service

  2. Clique na guia Gerenciador de certificados particulares.
  3. Na lista de certificados, clique em Ver mais na linha do certificado que você quer excluir.
  4. Clique em Revogar.
  5. Na caixa de diálogo exibida, clique em Confirmar.
.

gcloud

  • Para revogar um certificado usando o nome do recurso, execute o seguinte comando:

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

    Substitua:

    • CERT_ID: o identificador exclusivo do certificado que você quer revogar.
    • POOL_ID: o nome do pool de ACs que emitiu o certificado.
    • REVOCATION_REASON: o motivo da revogação do certificado.

    A sinalização --reason é opcional. Para mais informações sobre essa flag, consulte --reason ou use o comando gcloud abaixo com a flag --help:

    gcloud privateca certificates revoke --help
    

    Para mais informações sobre o comando gcloud privateca certificates revoke, consulte revogar certificados do gcloud privateca.

  • Para revogar um certificado usando o número de série, execute o seguinte comando:

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

    Substitua:

    • SERIAL_NUMBER: o número de série do certificado.
    • POOL_ID: o nome do pool de ACs que emitiu o certificado.
    • REVOCATION_REASON: o motivo da revogação do certificado.

    Para mais informações sobre o comando gcloud privateca certificates revoke, consulte revogar certificados do gcloud privateca.

    Para confirmar, digite '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 autenticar no serviço de CA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 autenticar no CA Service, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 autenticar no serviço de CA, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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)

A seguir