Zertifikate widerrufen

Auf dieser Seite wird beschrieben, wie Sie Zertifikate widerrufen.

Der Certificate Authority Service unterstützt den Widerruf von Zertifikaten durch regelmäßige Veröffentlichung von Zertifikatssperrlisten (Certificate Revocation Lists, CRLs). Sie können nur Zertifikate widerrufen, die von CA-Pools in der Enterprise-Stufe ausgestellt wurden.

Hinweise

Sie benötigen die IAM-Rolle „Zertifizierungsstelle – Betriebsmanager“ (roles/privateca.caManager) oder „Zertifizierungsstelle – Administrator“ (roles/privateca.admin). Weitere Informationen zu den vordefinierten IAM-Rollen für den CA-Dienst finden Sie unter Zugriffssteuerung mit IAM.

Informationen zum Zuweisen einer IAM-Rolle finden Sie unter Einzelne Rolle zuweisen.

CRL-Veröffentlichung aktivieren

Wenn Sie die von einem CA-Pool ausgestellten Zertifikate widerrufen möchten, müssen Sie die CRL-Veröffentlichung für den CA-Pool aktivieren. Sie können die CRL-Veröffentlichung beim Erstellen eines CA-Pools aktivieren. Wenn die CRL-Veröffentlichung anfangs deaktiviert ist, können Sie sie später aktivieren.

Nachdem Sie die CRL-Veröffentlichung aktiviert haben, wird täglich eine neue CRL veröffentlicht, die 7 Tage lang gültig ist. Außerdem wird innerhalb von 15 Minuten nach jeder neuen Zertifikatswiderrufung eine neue CRL veröffentlicht.

So aktivieren Sie die CRL-Veröffentlichung für einen CA-Pool:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Certificate Authority Service auf.

    Certificate Authority Service

  2. Klicken Sie auf den Tab CA-Poolmanager.

  3. Klicken Sie auf den CA-Pool, den Sie bearbeiten möchten, oder auf den CA-Pool, der die CA enthält, die Sie bearbeiten möchten.

  4. Klicken Sie auf der Seite CA-Pool auf Bearbeiten.

  5. Klicken Sie auf Weiter, bis Sie den Abschnitt Veröffentlichungsoptionen konfigurieren erreichen.

  6. Klicken Sie auf die Ein/Aus-Schaltfläche CRL im GCS-Bucket für CAs in diesem Pool veröffentlichen.

gcloud

Führen Sie dazu diesen Befehl aus:

gcloud privateca pools update POOL_ID \
  --publish-crl

Ersetzen Sie POOL_ID durch den Namen des Zertifizierungsstellenpools.

Weitere Informationen zum Befehl gcloud privateca pools update finden Sie unter gcloud privateca pools update.

CA Service erzwingt ein Limit von 500.000 nicht abgelaufenen widerrufenen Zertifikaten pro CRL.

Zertifikat widerrufen

Mit CA Service können Zertifikate anhand der Seriennummer oder des Ressourcennamens widerrufen werden. Optional kann auch ein Grund angegeben werden. Nachdem ein Zertifikat widerrufen wurde, werden seine Seriennummer und der Widerrufsgrund in allen zukünftigen CRLs aufgeführt, bis das Zertifikat abläuft. Innerhalb von 15 Minuten nach dem Widerruf wird auch eine externe CRL generiert.

So widerrufen Sie ein Zertifikat:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Certificate Authority Service auf.

    Zum Certificate Authority Service

  2. Klicken Sie auf den Tab Privater Zertifikatmanager.
  3. Klicken Sie in der Liste der Zertifikate in der Zeile des Zertifikats, das Sie löschen möchten, auf Mehr anzeigen.
  4. Klicken Sie auf Aufheben.
  5. Klicken Sie im Dialogfeld, das geöffnet wird, auf Bestätigen.

gcloud

  • Führen Sie den folgenden Befehl aus, um ein Zertifikat anhand seines Ressourcennamens zu widerrufen:

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

    Ersetzen Sie Folgendes:

    • CERT_ID: Die eindeutige Kennung des Zertifikats, das Sie widerrufen möchten.
    • POOL_ID: Der Name des CA-Pools, der das Zertifikat ausgestellt hat.
    • REVOCATION_REASON: Der Grund für den Widerruf des Zertifikats.

    Das Flag --reason ist optional. Weitere Informationen zu diesem Flag finden Sie unter --reason. Sie können auch den folgenden gcloud-Befehl mit dem Flag --help verwenden:

    gcloud privateca certificates revoke --help
    

    Weitere Informationen zum Befehl gcloud privateca certificates revoke finden Sie unter gcloud privateca certificates revoke.

  • Führen Sie den folgenden Befehl aus, um ein Zertifikat anhand seiner Seriennummer zu widerrufen:

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

    Ersetzen Sie Folgendes:

    • SERIAL_NUMBER: Die Seriennummer des Zertifikats.
    • POOL_ID: Der Name des CA-Pools, der das Zertifikat ausgestellt hat.
    • REVOCATION_REASON: Der Grund für den Widerruf des Zertifikats.

    Weitere Informationen zum Befehl gcloud privateca certificates revoke finden Sie unter gcloud privateca certificates revoke.

    Wenn Sie zur Bestätigung aufgefordert werden, geben Sie „Y“ ein:

    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

Richten Sie zur Authentifizierung beim CA-Dienst die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Richten Sie zur Authentifizierung beim CA-Dienst die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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

Richten Sie zur Authentifizierung beim CA-Dienst die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


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)

Nächste Schritte