Revogar certificados

Nesta página, explicamos como revogar certificados.

O Certificate Authority Service oferece suporte à revogação de certificados com a publicação periódica de listas de revogação de certificados (CRLs). Só é possível revogar certificados emitidos por pools de CAs no nível Enterprise.

Antes de começar

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

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

Ativar publicação da CRL

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

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

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

Console

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

    Certificate Authority Service

  2. Clique no nome de uma AC no pool de AC que você quer modificar.

  3. Na página Autoridade de certificação, clique em Editar política.

  4. No painel à esquerda exibido, clique no botão Publicar o URL de acesso da lista de revogação de certificados em certificados emitidos em Opções de publicação.

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 CA Service aplica um limite de 500.000 certificados revogados não expirados por CRL.

Revogar um certificado

O CA Service permite a revogação de 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 de banda também é gerada 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 console do Google Cloud.

    Acessar o Certificate Authority Service

  2. Clique na guia Gerenciador de certificados particulares.
  3. Na lista de certificados, clique em Ver mais na linha do 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 revogação de 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 revogação de certificados do gcloud privateca.

    Quando solicitado para confirmar, você pode fazê-lo digitando '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 o 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 o 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 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 o 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