Revogar certificados

Nesta página, explicamos como revogar certificados.

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

Antes de começar

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

Para 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, é necessário ativar a publicação de CRL no pool de ACs. É possível ativar a publicação de CRL ao criar um pool de ACs. Se inicialmente desativada, você pode ativar a publicação de CRL mais tarde.

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

Os certificados contêm uma extensão de ponto de distribuição de CRL (CDP) que especifica onde as informações de CRL do certificado podem ser encontradas. Por padrão, quando você ativa a publicação de CRL, o CA Service preenche a extensão de CDP para todos os certificados emitidos pela AC com o local de publicação do Cloud Storage que a AC usa. Para definir seus próprios links para aparecerem nessa extensão de certificado, defina o UserDefinedAccessUrls. Para manter o link de local de publicação padrão do Cloud Storage e também adicionar seus próprios links, adicione o link do Cloud Storage à lista de links especificados.

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 Google Cloud console.

    Certificate Authority Service

  2. Clique na guia Gerenciador de pools de ACs.

  3. Clique no pool de ACs que você quer editar ou no pool de ACs que tem a AC que você quer editar.

  4. Na página Pool de ACs, clique em

    Editar.

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

  6. Clique na opção Publicar a CRL no bucket do GCS para ACs neste pool.

gcloud

Execute este comando:

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

Substitua:

  • POOL_ID: o nome do pool de ACs
  • LOCATION: o local do pool de ACs. Para a lista completa de locais, consulte Locais.

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

O CA Service aplica um limite de 500.000 certificados revogados não expirados por CRL.

Somente as últimas 100 CRLs em ordem cronológica são mantidas como CertificateRevocationList, e as CRLs mais antigas são excluídas automaticamente. A retenção de CRLs mais antigas em buckets do Cloud Storage gerenciados pelo cliente está sujeita às políticas de controle de versões de objetos e de retenção configuradas pelos clientes.
Observação: As CRLs que foram excluídas do CA Service ainda podem ser acessadas em buckets do Cloud Storage gerenciados pelo serviço, a menos que a AC seja excluída. As CRLs nunca são excluídas de buckets do Cloud Storage gerenciados pelo cliente, mesmo que a AC seja excluída.

Revogar um certificado

O CA Service permite revogar certificados por número de série ou nome do 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 da banda também é gerada em até 15 minutos após a revogação.

Para revogar um certificado, siga estas etapas:

Console

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

    Acesse 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 \
        --issuer-location ISSUER_LOCATION \
        --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
    • ISSUER_LOCATION: o local do pool de ACs emissor
    • REVOCATION_REASON: o motivo da revogação do certificado

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

    gcloud privateca certificates revoke --help
    

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

  • 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 \
        --issuer-location ISSUER_LOCATION \
        --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
    • ISSUER_LOCATION: o local do pool de ACs emissor
    • REVOCATION_REASON: o motivo da revogação do certificado

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

    Quando for preciso 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.
    
    

Ir

Para autenticar no CA Service, configure o Application Default Credentials. Se quiser 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. Se quiser 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 CA Service, configure o Application Default Credentials. Se quiser 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