Richiedere un certificato e visualizzare i certificati emessi

Questo argomento descrive come richiedere un certificato a Certificate Authority Service e visualizzare i certificati emessi.

Prima di iniziare

Assicurati di disporre del ruolo IAM Richiedente certificato servizio CA (roles/privateca.certificateRequester) o Gestore certificati CA Service (roles/privateca.certificateManager). Per ulteriori informazioni sui ruoli IAM predefiniti per CA Service, consulta Controllo dell'accesso con IAM.

Per informazioni sulla concessione di un ruolo IAM a un'entità, consulta Concedi un singolo ruolo.

Panoramica

Puoi richiedere un certificato utilizzando i seguenti metodi:

  1. Genera la tua chiave privata o pubblica e invia una richiesta di firma del certificato (CSR).
  2. Fai in modo che CA Service crei una chiave privata o pubblica per te.
  3. Utilizza una chiave esistente di Cloud Key Management Service (Cloud KMS).

Richiedi il certificato utilizzando un CSR

Prima di procedere, devi generare un CSR. Dopo aver generato una richiesta di firma del certificato, procedi nel seguente modo:

Console

  1. Vai alla pagina Certificate Authority Service nella console Google Cloud.

    Vai a Certificate Authority Service

  2. Fai clic sulla scheda CA Manager (Gestore CA).

  3. Fai clic sul nome dell'autorità di certificazione da cui vuoi emettere.

  4. Nella parte inferiore della pagina dei dettagli dell'autorità di certificazione, fai clic su Richiedi un certificato.

  5. (Facoltativo) Se vuoi utilizzare un modello di certificato, fai clic su , seleziona un modello dall'elenco e fai clic su Salva.

  6. Fai clic su Fornisci CSR.

  7. (Facoltativo) Per sovrascrivere il nome del certificato generato automaticamente, inserisci il nome personalizzato nel campo Nome certificato.

  8. Facoltativo: per scegliere un periodo di validità personalizzato per il certificato, inserisci il valore nel campo Valido per.

  9. Copia e incolla la richiesta di firma del certificato nella casella CSR certificato. Per caricare la richiesta di firma del certificato, fai clic su Sfoglia.

  10. Tocca Avanti.

Scaricare il certificato firmato

  1. Per copiare il certificato, fai clic su . Per scaricare il certificato sotto forma di file .crt, fai clic su Scarica certificato.
  2. (Facoltativo) Per scaricare la catena di certificati, fai clic su Scarica catena di certificati.
  3. Fai clic su Fine.

gcloud

gcloud privateca certificates create CERT_ID \
     --issuer-pool POOL_ID \
     --csr CSR_FILENAME \
     --cert-output-file CERT_FILENAME \
     --validity "P30D"

Sostituisci quanto segue:

  • CERT_ID: l'identificatore univoco del certificato.
  • POOL_ID: il nome del pool di CA.
  • CSR_FILENAME: il file in cui è archiviata la richiesta di firma CSR con codifica PEM.

Il flag --validity definisce il periodo di validità del certificato. Si tratta di un flag facoltativo il cui valore predefinito è 30 giorni.

Per ulteriori informazioni sul comando gcloud privateca certificates create, vedi gcloud privateca certificate create.

Terraform

resource "google_privateca_certificate_authority" "test_ca" {
  pool                     = "my-pool"
  certificate_authority_id = "my-certificate-authority"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-certificate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        # is_ca *MUST* be true for certificate authorities
        is_ca = true
      }
      key_usage {
        base_key_usage {
          # cert_sign and crl_sign *MUST* be true for certificate authorities
          cert_sign = true
          crl_sign  = true
        }
        extended_key_usage {
          server_auth = false
        }
      }
    }
  }
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}

resource "google_privateca_certificate" "default" {
  pool                  = "my-pool"
  location              = "us-central1"
  certificate_authority = google_privateca_certificate_authority.test_ca.certificate_authority_id
  lifetime              = "860s"
  name                  = "my-certificate"
  pem_csr               = tls_cert_request.example.cert_request_pem
}

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

resource "tls_cert_request" "example" {
  private_key_pem = tls_private_key.example.private_key_pem

  subject {
    common_name  = "example.com"
    organization = "ACME Examples, Inc"
  }
}

API REST

  1. Genera una richiesta di firma del certificato (CSR) utilizzando il metodo che preferisci, ad esempio openssl.

    Di seguito è riportato un esempio di CSR codificato per JSON.

    -----BEGIN CERTIFICATE REQUEST-----\nMIIChTCCAW0CAQAwQDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQ8wDQYDVQQK\nDAZKb29uaXgxEzARBgNVBAMMCmpvb25peC5uZXQwggEiMA0GCSqGSIb3DQEBAQUA\nA4IBDwAwggEKAoIBAQCnyy+5vcRQUBPqAse3ojmWjyUvhcJK6eLRXpp0teEUF5kg\nHb2ov8gYXb9sSim5fnvs09dGYDKibSrL4Siy7lA/NzMzWtKwyQQeLIQq/cLUJVcd\ndItJ0VRcqr+UPkTCii2vrdcocNDChHM1J8chDdl6DkpYieSTqZwlPcWlQBGAINmT\nT3Q0ZarIVM5l74j13WPuToGrhbVOIZXWxWqJjlHbBA8B/VKtSRCzM1qG60y8Pu2f\n6c78Dfg8+CGRzGwnz8aFS0Yf9czT9luNHSadS/RHjvE9FPZCsinz+6mJlXRcphi1\nKaHsDbstUAhse1h5E9Biyr9SFYRHxY7qRv9aSJ/dAgMBAAGgADANBgkqhkiG9w0B\nAQsFAAOCAQEAZz+I9ff1Rf3lTewXRUpA7nr5HVO1ojCR93Pf27tI/hvNH7z7GwnS\noScoJlClxeRqABOCnfmVoRChullb/KmER4BZ/lF0GQpEtbqbjgjkEDpVlBKCb0+L\nHE9psplIz6H9nfFS3Ouoiodk902vrMEh0LyDYNQuqFoyCZuuepUlK3NmtmkexlgT\n0pJg/5FV0iaQ+GiFXSZhTC3drfiM/wDnXGiqpbW9WmebSij5O+3BNYXKBUgqmT3r\nbryFydNq4qSOIbnN/MNb4UoKno3ve7mnGk9lIDf9UMPvhl+bT7C3OLQLGadJroME\npYnKLoZUvRwEdtZpbNL9QhCAm2QiJ6w+6g==\n-----END CERTIFICATE REQUEST-----
    
  2. Richiedi un certificato.

    Metodo HTTP e URL:

    POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificates?certificate_id=CERTIFICATE_ID

    Corpo JSON della richiesta:

    {
     "lifetime": {
       "seconds": 3600,
       "nanos": 0
     },
     "pem_csr": "PEM_CSR"
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
     "name": "projects/project-id/locations/location/certificateAuthorities/ca-id/certificates/certificate-id",
     "pemCertificate": "-----BEGIN CERTIFICATE-----...",
     "certificateDescription": {...}
    }
    

Richiedi il certificato utilizzando una chiave generata automaticamente

Console

Puoi utilizzare la console Google Cloud per generare certificati TLS client o server.

  1. Nella console Google Cloud, vai alla pagina Certificate Authority Service.

    Vai a Certificate Authority Service

  2. Fai clic sulla scheda CA Manager (Gestore CA).

  3. Fai clic sul nome dell'autorità di certificazione da cui vuoi emettere.

  4. Nella parte inferiore della pagina dei dettagli dell'autorità di certificazione, fai clic su Richiedi un certificato.

  5. (Facoltativo) Se vuoi utilizzare un modello di certificato, fai clic su , seleziona un modello dall'elenco e fai clic su Salva.

  6. Fai clic su Inserisci dettagli.

  7. (Facoltativo) Sostituisci il Nome certificato generato automaticamente con un nome personalizzato univoco.

  8. Facoltativo: per scegliere un periodo di validità personalizzato per il certificato, inserisci il valore nel campo Valido per.

Aggiungi nome di dominio

  1. In Aggiungi nome di dominio, inserisci un nome di dominio nel campo Nome di dominio 1.
  2. (Facoltativo) Se vuoi aggiungere più di un nome di dominio, fai clic su Aggiungi elemento e inserisci un altro nome di dominio nel campo Nome di dominio 2.

Utilizzo esteso della chiave

  1. (Facoltativo) In Utilizzo esteso della chiave, seleziona una delle seguenti opzioni in base al tuo caso d'uso:

    • TLS del server: questi certificati consentono di autenticare l'identità di un server.
    • TLS client: questi certificati consentono di autenticare l'identità di un richiedente.
  2. Tocca Avanti.

Configurare le dimensioni e l'algoritmo della chiave

  1. (Facoltativo) In Configura dimensioni e algoritmo della chiave, seleziona dall'elenco le dimensioni e l'algoritmo della chiave di firma. Se salti questo passaggio, viene utilizzata una chiave RSASSA-PSS a 2048 bit con un digest SHA 256. Per informazioni sulla selezione di una chiave di firma e di un algoritmo, consulta Scegliere un algoritmo chiave.
  2. Fai clic su Continua.

Scaricare il certificato firmato

  1. (Facoltativo) Per scaricare la catena di certificati con codifica PEM, fai clic su Scarica catena di certificati.
  2. (Facoltativo) Per scaricare la chiave privata con codifica PEM associata, fai clic su Scarica chiave privata.

  3. Fai clic su Fine.

gcloud

Per utilizzare la funzionalità chiave generata automaticamente, devi installare la libreria Python Cryptographic Authority (PyCA). Per istruzioni sull'installazione della libreria di crittografia Pyca, consulta Inclusione della libreria di crittografia Pyca.

Per creare un certificato, usa il seguente comando gcloud:

gcloud privateca certificates create \
  --issuer-pool POOL_ID \
  --generate-key \
  --key-output-file KEY_FILENAME \
  --cert-output-file CERT_FILENAME \
  --dns-san "DNS_NAME" \
  --use-preset-profile "CERTIFICATE_PROFILE"

Sostituisci quanto segue:

  • POOL_ID: il nome del pool di CA.
  • KEY_FILENAME: il percorso in cui deve essere scritto il file della chiave privata generato.
  • CERT_FILENAME: il percorso in cui deve essere scritto il file della catena di certificati con codifica PEM. La catena di certificati è ordinata da end-entity a root.
  • DNS_NAME: uno o più nomi alternativi (SAN) di oggetti DNS separati da virgole.
  • CERTIFICATE_PROFILE: l'identificatore univoco del profilo certificato. Ad esempio, utilizza leaf_server_tls per il protocollo TLS del server dell'entità finale.

Il comando gcloud menziona i seguenti flag:

  • --generate-key: genera una nuova chiave privata RSA-2048 sulla tua macchina.

Puoi anche utilizzare qualsiasi combinazione dei seguenti flag:

  • --dns-san: consente di passare una o più SAN DNS separate da virgole.
  • --ip-san: consente di passare una o più SAN IP separate da virgole.
  • --uri-san: consente di passare una o più SAN URI separati da virgole.
  • --subject: consente di passare un nome X.501 dell'oggetto del certificato.

Per ulteriori informazioni sul comando gcloud privateca certificates create, vedi gcloud privateca certificate create.

Go

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"fmt"
	"io"

	privateca "cloud.google.com/go/security/privateca/apiv1"
	"cloud.google.com/go/security/privateca/apiv1/privatecapb"
	"google.golang.org/protobuf/types/known/durationpb"
)

// Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
// The key used to sign the certificate is created by the Cloud KMS.
func createCertificate(
	w io.Writer,
	projectId string,
	location string,
	caPoolId string,
	caId string,
	certId string,
	commonName string,
	domainName string,
	certDuration int64,
	publicKeyBytes []byte) 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 authority exists.
	// caId := "ca-id"					// The name of the certificate authority which issues the certificate.
	// certId := "certificate"			// A unique name for the certificate.
	// commonName := "cert-name"		// A common name for the certificate.
	// domainName := "cert.example.com"	// Fully qualified domain name for the certificate.
	// certDuration := int64(31536000)	// The validity of the certificate in seconds.
	// publicKeyBytes 					// The public key used in signing the certificates.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	// Set the Public Key and its format.
	publicKey := &privatecapb.PublicKey{
		Key:    publicKeyBytes,
		Format: privatecapb.PublicKey_PEM,
	}

	// Set Certificate subject config.
	subjectConfig := &privatecapb.CertificateConfig_SubjectConfig{
		Subject: &privatecapb.Subject{
			CommonName: commonName,
		},
		SubjectAltName: &privatecapb.SubjectAltNames{
			DnsNames: []string{domainName},
		},
	}

	// Set the X.509 fields required for the certificate.
	x509Parameters := &privatecapb.X509Parameters{
		KeyUsage: &privatecapb.KeyUsage{
			BaseKeyUsage: &privatecapb.KeyUsage_KeyUsageOptions{
				DigitalSignature: true,
				KeyEncipherment:  true,
			},
			ExtendedKeyUsage: &privatecapb.KeyUsage_ExtendedKeyUsageOptions{
				ServerAuth: true,
				ClientAuth: true,
			},
		},
	}

	// Set certificate settings.
	cert := &privatecapb.Certificate{
		CertificateConfig: &privatecapb.Certificate_Config{
			Config: &privatecapb.CertificateConfig{
				PublicKey:     publicKey,
				SubjectConfig: subjectConfig,
				X509Config:    x509Parameters,
			},
		},
		Lifetime: &durationpb.Duration{
			Seconds: certDuration,
		},
	}

	fullCaPoolName := fmt.Sprintf("projects/%s/locations/%s/caPools/%s", projectId, location, caPoolId)

	// Create the CreateCertificateRequest.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#CreateCertificateRequest.
	req := &privatecapb.CreateCertificateRequest{
		Parent:                        fullCaPoolName,
		CertificateId:                 certId,
		Certificate:                   cert,
		IssuingCertificateAuthorityId: caId,
	}

	_, err = caClient.CreateCertificate(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateCertificate failed: %w", err)
	}

	fmt.Fprintf(w, "Certificate %s created", certId)

	return nil
}

Java

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


import com.google.api.core.ApiFuture;
import com.google.cloud.security.privateca.v1.CaPoolName;
import com.google.cloud.security.privateca.v1.Certificate;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.CertificateConfig;
import com.google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig;
import com.google.cloud.security.privateca.v1.CreateCertificateRequest;
import com.google.cloud.security.privateca.v1.KeyUsage;
import com.google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions;
import com.google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions;
import com.google.cloud.security.privateca.v1.PublicKey;
import com.google.cloud.security.privateca.v1.PublicKey.KeyFormat;
import com.google.cloud.security.privateca.v1.Subject;
import com.google.cloud.security.privateca.v1.SubjectAltNames;
import com.google.cloud.security.privateca.v1.X509Parameters;
import com.google.cloud.security.privateca.v1.X509Parameters.CaOptions;
import com.google.protobuf.ByteString;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateCertificate {

  public static void main(String[] args)
      throws InterruptedException, ExecutionException, IOException {
    // TODO(developer): Replace these variables before running the sample.

    // publicKeyBytes: Public key used in signing the certificates.
    // location: For a list of locations, see:
    // https://cloud.google.com/certificate-authority-service/docs/locations
    // poolId: Set a unique id for the CA pool.
    // certificateAuthorityName: The name of the certificate authority which issues the certificate.
    // certificateName: Set a unique name for the certificate.
    String project = "your-project-id";
    ByteString publicKeyBytes = ByteString.copyFrom(new byte[]{});
    String location = "ca-location";
    String poolId = "ca-poolId";
    String certificateAuthorityName = "certificate-authority-name";
    String certificateName = "certificate-name";

    createCertificate(
        project, location, poolId, certificateAuthorityName, certificateName, publicKeyBytes);
  }

  // Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
  // The public key used to sign the certificate can be generated using any crypto
  // library/framework.
  public static void createCertificate(
      String project,
      String location,
      String poolId,
      String certificateAuthorityName,
      String certificateName,
      ByteString publicKeyBytes)
      throws InterruptedException, ExecutionException, IOException {
    // 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()) {

      // commonName: Enter a title for your certificate.
      // orgName: Provide the name of your company.
      // domainName: List the fully qualified domain name.
      // certificateLifetime: The validity of the certificate in seconds.
      String commonName = "commonname";
      String orgName = "orgname";
      String domainName = "dns.example.com";
      long certificateLifetime = 1000L;

      // Set the Public Key and its format.
      PublicKey publicKey =
          PublicKey.newBuilder().setKey(publicKeyBytes).setFormat(KeyFormat.PEM).build();

      SubjectConfig subjectConfig =
          SubjectConfig.newBuilder()
              // Set the common name and org name.
              .setSubject(
                  Subject.newBuilder().setCommonName(commonName).setOrganization(orgName).build())
              // Set the fully qualified domain name.
              .setSubjectAltName(SubjectAltNames.newBuilder().addDnsNames(domainName).build())
              .build();

      // Set the X.509 fields required for the certificate.
      X509Parameters x509Parameters =
          X509Parameters.newBuilder()
              .setKeyUsage(
                  KeyUsage.newBuilder()
                      .setBaseKeyUsage(
                          KeyUsageOptions.newBuilder()
                              .setDigitalSignature(true)
                              .setKeyEncipherment(true)
                              .setCertSign(true)
                              .build())
                      .setExtendedKeyUsage(
                          ExtendedKeyUsageOptions.newBuilder().setServerAuth(true).build())
                      .build())
              .setCaOptions(CaOptions.newBuilder().setIsCa(true).buildPartial())
              .build();

      // Create certificate.
      Certificate certificate =
          Certificate.newBuilder()
              .setConfig(
                  CertificateConfig.newBuilder()
                      .setPublicKey(publicKey)
                      .setSubjectConfig(subjectConfig)
                      .setX509Config(x509Parameters)
                      .build())
              .setLifetime(Duration.newBuilder().setSeconds(certificateLifetime).build())
              .build();

      // Create the Certificate Request.
      CreateCertificateRequest certificateRequest =
          CreateCertificateRequest.newBuilder()
              .setParent(CaPoolName.of(project, location, poolId).toString())
              .setCertificateId(certificateName)
              .setCertificate(certificate)
              .setIssuingCertificateAuthorityId(certificateAuthorityName)
              .build();

      // Get the Certificate response.
      ApiFuture<Certificate> future =
          certificateAuthorityServiceClient
              .createCertificateCallable()
              .futureCall(certificateRequest);

      Certificate response = future.get();
      // Get the PEM encoded, signed X.509 certificate.
      System.out.println(response.getPemCertificate());
      // To verify the obtained certificate, use this intermediate chain list.
      System.out.println(response.getPemCertificateChainList());
    }
  }
}

Python

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import google.cloud.security.privateca_v1 as privateca_v1
from google.protobuf import duration_pb2

def create_certificate(
    project_id: str,
    location: str,
    ca_pool_name: str,
    ca_name: str,
    certificate_name: str,
    common_name: str,
    domain_name: str,
    certificate_lifetime: int,
    public_key_bytes: bytes,
) -> None:
    """
    Create a Certificate which is issued by the Certificate Authority present in the CA Pool.
    The key used to sign the certificate is created by the Cloud KMS.

    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: set a unique name for the CA pool.
        ca_name: the name of the certificate authority which issues the certificate.
        certificate_name: set a unique name for the certificate.
        common_name: a title for your certificate.
        domain_name: fully qualified domain name for your certificate.
        certificate_lifetime: the validity of the certificate in seconds.
        public_key_bytes: public key used in signing the certificates.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    # The public key used to sign the certificate can be generated using any crypto library/framework.
    # Also you can use Cloud KMS to retrieve an already created public key.
    # For more info, see: https://cloud.google.com/kms/docs/retrieve-public-key.

    # Set the Public Key and its format.
    public_key = privateca_v1.PublicKey(
        key=public_key_bytes,
        format_=privateca_v1.PublicKey.KeyFormat.PEM,
    )

    subject_config = privateca_v1.CertificateConfig.SubjectConfig(
        subject=privateca_v1.Subject(common_name=common_name),
        subject_alt_name=privateca_v1.SubjectAltNames(dns_names=[domain_name]),
    )

    # Set the X.509 fields required for the certificate.
    x509_parameters = privateca_v1.X509Parameters(
        key_usage=privateca_v1.KeyUsage(
            base_key_usage=privateca_v1.KeyUsage.KeyUsageOptions(
                digital_signature=True,
                key_encipherment=True,
            ),
            extended_key_usage=privateca_v1.KeyUsage.ExtendedKeyUsageOptions(
                server_auth=True,
                client_auth=True,
            ),
        ),
    )

    # Create certificate.
    certificate = privateca_v1.Certificate(
        config=privateca_v1.CertificateConfig(
            public_key=public_key,
            subject_config=subject_config,
            x509_config=x509_parameters,
        ),
        lifetime=duration_pb2.Duration(seconds=certificate_lifetime),
    )

    # Create the Certificate Request.
    request = privateca_v1.CreateCertificateRequest(
        parent=caServiceClient.ca_pool_path(project_id, location, ca_pool_name),
        certificate_id=certificate_name,
        certificate=certificate,
        issuing_certificate_authority_id=ca_name,
    )
    result = caServiceClient.create_certificate(request=request)

    print("Certificate creation result:", result)

Richiedi il certificato utilizzando una chiave Cloud KMS esistente

Per utilizzare una chiave Cloud KMS per creare un certificato TLS del server di entità finale, esegui questo comando:

gcloud privateca certificates create \
  --issuer-pool POOL_ID \
  --kms-key-version projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/KEY_VERSION \
  --cert-output-file CERT_FILENAME \
  --dns-san "DNS_NAME" \
  --use-preset-profile "leaf_server_tls"

Sostituisci quanto segue:

  • POOL_ID: il nome del pool di CA.
  • PROJECT_ID: l'ID progetto.
  • LOCATION_ID: la posizione del keyring.
  • KEY_RING: il nome del keyring in cui si trova la chiave.
  • KEY: il nome della chiave.
  • KEY_VERSION: la versione della chiave.
  • CERT_FILENAME: il percorso del file della catena di certificati con codifica PEM. Il file della catena di certificati viene ordinato da end-entity al root.
  • DNS_NAME: SAN DNS separate da virgole.

Esecuzione di operazioni comuni con i certificati

Questa sezione descrive come eseguire alcune operazioni comuni con i certificati.

Emetti un certificato da una CA specifica in un pool di CA

gcloud

Per scegliere come target una CA specifica nel pool di CA per l'emissione del certificato, aggiungi il flag --ca con il valore CA_ID della CA che deve rilasciare il certificato.

gcloud privateca certificates create \
  --issuer-pool POOL_ID \
  --ca CA_ID \
  --generate-key \
  --key-output-file KEY_FILENAME \
  --cert-output-file CERT_FILENAME \
  --dns-san "DNS_NAME" \
  --use-preset-profile "leaf_server_tls"

Console

La console Google Cloud supporta l'emissione di certificati solo da una determinata CA. Segui le istruzioni nella sezione Richiedi il certificato utilizzando una chiave generata automaticamente o nella sezione Richiedi il certificato utilizzando una CSR per scegliere la CA che deve rilasciare il certificato.

Terraform

resource "google_privateca_certificate_authority" "authority" {
  // This example assumes this pool already exists.
  // Pools cannot be deleted in normal test circumstances, so we depend on static pools
  pool                     = "my-pool"
  certificate_authority_id = "my-sample-certificate-authority"
  location                 = "us-central1"
  deletion_protection      = false # set to true to prevent destruction of the resource
  config {
    subject_config {
      subject {
        organization = "HashiCorp"
        common_name  = "my-certificate-authority"
      }
      subject_alt_name {
        dns_names = ["hashicorp.com"]
      }
    }
    x509_config {
      ca_options {
        is_ca = true
      }
      key_usage {
        base_key_usage {
          digital_signature = true
          cert_sign         = true
          crl_sign          = true
        }
        extended_key_usage {
          server_auth = true
        }
      }
    }
  }
  lifetime = "86400s"
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}

resource "google_privateca_certificate" "default" {
  pool     = "my-pool"
  location = "us-central1"
  lifetime = "860s"
  name     = "my-sample-certificate"
  config {
    subject_config {
      subject {
        common_name         = "san1.example.com"
        country_code        = "us"
        organization        = "google"
        organizational_unit = "enterprise"
        locality            = "mountain view"
        province            = "california"
        street_address      = "1600 amphitheatre parkway"
        postal_code         = "94109"
      }
    }
    x509_config {
      ca_options {
        is_ca = false
      }
      key_usage {
        base_key_usage {
          crl_sign = true
        }
        extended_key_usage {
          server_auth = true
        }
      }
    }
    public_key {
      format = "PEM"
      key    = base64encode(data.tls_public_key.example.public_key_pem)
    }
  }
  // Certificates require an authority to exist in the pool, though they don't
  // need to be explicitly connected to it
  depends_on = [google_privateca_certificate_authority.authority]
}

resource "tls_private_key" "example" {
  algorithm = "RSA"
}

data "tls_public_key" "example" {
  private_key_pem = tls_private_key.example.private_key_pem
}

Visualizza i certificati emessi

Console

  1. Nella console Google Cloud, vai alla pagina Certificate Authority Service.

    Vai a Certificate Authority Service

  2. Fai clic sulla scheda Gestore CA.

  3. Nella pagina Autorità di certificazione, fai clic sul nome dell'autorità di certificazione.

  4. Nella parte inferiore della pagina dei dettagli dell'autorità di certificazione, fai clic su Visualizza i certificati emessi per visualizzare l'elenco dei certificati emessi dalla CA.

    Puoi visualizzare i certificati nella pagina Tutti i certificati. I dettagli includono lo stato del certificato, la CA emittente, il pool di CA che contiene la CA, la data di scadenza del certificato e altro ancora.

gcloud

Per elencare tutti i certificati emessi da una determinata CA in un pool di CA, utilizza il seguente comando gcloud:

gcloud privateca certificates list --issuer-pool ISSUER_POOL --ca CA_NAME

Per ulteriori informazioni sul comando gcloud privateca certificates list, vedi gcloud privatecacertificate list.

Per elencare tutti i certificati di tutte le CA in una determinata località, utilizza il seguente comando gcloud:

gcloud privateca certificates list --location LOCATION

Go

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"fmt"
	"io"

	privateca "cloud.google.com/go/security/privateca/apiv1"
	"cloud.google.com/go/security/privateca/apiv1/privatecapb"
	"google.golang.org/api/iterator"
)

// List Certificates present in the given CA pool.
func listCertificates(
	w io.Writer,
	projectId string,
	location string,
	caPoolId 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.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	fullCaName := fmt.Sprintf("projects/%s/locations/%s/caPools/%s", projectId, location, caPoolId)

	// Create the ListCertificatesRequest.
	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#ListCertificatesRequest.
	req := &privatecapb.ListCertificatesRequest{Parent: fullCaName}

	it := caClient.ListCertificates(ctx, req)
	for {
		resp, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("unable to get the list of cerficates: %w", err)
		}

		fmt.Fprintf(w, " - %s (common name: %s)", resp.Name,
			resp.CertificateDescription.SubjectDescription.Subject.CommonName)
	}

	return nil
}

Java

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.security.privateca.v1.CaPoolName;
import com.google.cloud.security.privateca.v1.Certificate;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import java.io.IOException;

public class ListCertificates {

  public static void main(String[] args) throws IOException {
    // 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 of the CA pool which contains the certificates to be listed.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    listCertificates(project, location, poolId);
  }

  // List Certificates present in the given CA pool.
  public static void listCertificates(String project, String location, String poolId)
      throws IOException {
    // 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()) {

      CaPoolName caPool =
          CaPoolName.newBuilder()
              .setProject(project)
              .setLocation(location)
              .setCaPool(poolId)
              .build();

      // Retrieve and print the certificate names.
      System.out.println("Available certificates: ");
      for (Certificate certificate :
          certificateAuthorityServiceClient.listCertificates(caPool).iterateAll()) {
        System.out.println(certificate.getName());
      }
    }
  }
}

Python

Per eseguire l'autenticazione a CA Service, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


import google.cloud.security.privateca_v1 as privateca_v1

def list_certificates(
    project_id: str,
    location: str,
    ca_pool_name: str,
) -> None:
    """
    List Certificates present in the given CA pool.

    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 of the CA pool which contains the certificates to be listed.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    ca_pool_path = caServiceClient.ca_pool_path(project_id, location, ca_pool_name)

    # Retrieve and print the certificate names.
    print(f"Available certificates in CA pool {ca_pool_name}:")
    for certificate in caServiceClient.list_certificates(parent=ca_pool_path):
        print(certificate.name)

Visualizza i dettagli per un singolo certificato

Console

  1. Nella console Google Cloud, vai alla pagina Certificate Authority Service.

    Vai a Certificate Authority Service

  2. Scegli la CA di destinazione nella scheda Gestore CA.

  3. Fai clic sul nome della CA.

  4. Nella parte inferiore della pagina dei dettagli dell'autorità di certificazione, fai clic su Visualizza i certificati emessi per vedere l'elenco dei certificati emessi.

  5. Fai clic su nella colonna Azioni per il certificato che vuoi scaricare.

  6. In Scarica, fai clic su Certificato. Puoi scaricare la catena di certificati facendo clic su Catena di certificati.

gcloud

Per visualizzare la descrizione completa di un certificato, esegui questo comando:

gcloud privateca certificates describe CERT_NAME \
    --issuer-pool POOL_ID

Per ulteriori informazioni sul comando gcloud privateca certificates describe, consulta la pagina gcloud privateca documents describe.

Per esportare la catena di certificati X.509 con codifica PEM e in un file, esegui questo comando:

gcloud privateca certificates export CERT_NAME \
    --issuer-pool POOL_ID \
    --include-chain \
    --output-file certificate-file

Per ulteriori informazioni sul comando gcloud privateca certificates export, consulta gcloud privateca documents esportazione.

Prova di possesso dei certificati

La prova di possesso della chiave privata garantisce che il richiedente di un certificato possieda la chiave privata del certificato. Il servizio CA controlla la prova di possesso solo se il richiedente fornisce una CSR PKCS #10 in base a quanto indicato nel documento RFC 2986. Non viene applicata la prova di possesso di altre forme di richieste di certificato, ad esempio le richieste da parte di CertificateConfig.

È responsabilità delle applicazioni client che accettano i certificati verificare se il titolare possiede la chiave privata del certificato. L'applicazione di controlli per l'attestazione del possesso durante l'emissione dei certificati è una forma di difesa approfondita per la protezione dai clienti che si comportano in modo scorretto. L'esistenza di questi client, indipendentemente dal fatto che la CA verifichi la prova di possesso, potrebbe costituire una vulnerabilità di sicurezza.

Passaggi successivi