Demander un certificat

Cette page explique comment créer une demande de certificat dans Certificate Authority Service.

Vous pouvez demander un certificat à l'aide des méthodes suivantes:

  1. Générez votre propre clé privée ou publique et envoyez une signature de certificat Requête (CSR).
  2. Utilisez une clé privée ou publique générée automatiquement par CA Service.
  3. Utilisez une clé Cloud Key Management Service (Cloud KMS) existante.

Avant de commencer

  1. Préparez votre environnement pour le service CA.

  2. Pour obtenir les autorisations nécessaires pour émettre des certificats, contactez votre administrateur pour vous accorder le Demandeur de certificat du service CA (roles/privateca.certificateRequester) ou l'IAM du gestionnaire de certificats du service CA (roles/privateca.certificateManager) rôle de ressource.

    Pour en savoir plus sur les rôles IAM prédéfinis pour CA Service, consultez la page Contrôle des accès avec IAM.

    Pour en savoir plus sur l'attribution d'un rôle IAM à un compte principal, consultez Attribuer un seul rôle.

Demander un certificat à l'aide d'une requête de signature de certificat

Pour obtenir un certificat, vous devez générer une requête de signature de certificat que vous utiliserez ensuite pour demander le certificat.

Générer la requête de signature de certificat

Pour obtenir des instructions détaillées sur la façon de générer une requête de signature de certificat à l’aide d’OpenSSL, consultez la page Générer une requête de signature de certificat avec OpenSSL. Vous pouvez également utiliser l'exemple de fichier de configuration suivant comme référence lors de la génération votre requête de signature de certificat.

Pour utiliser l'exemple de fichier de configuration, procédez comme suit:

  1. Créez un fichier de configuration nommé csr.cnf à l'aide de la configuration suivante.

    cat << EOF > csr.cnf
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    CN = example.com
    
    [v3_req]
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = example.com
    DNS.2 = www.example.com
    EOF
    

    Cet exemple génère une clé RSA de 2 048 bits (phrase secrète chiffrée) et une requête de signature de certificat correspondante. contenant les éléments suivants:

    • L'attribut commonName dans le nom distinctif de l'objet
    • l'extension subjectAlternativeName
    • l'extension keyUsage (marquée comme critique)
    • l'extension extendedKeyUsage

    Modifiez les paramètres selon vos besoins. Pour utiliser le fichier de configuration x509v3_config pour définir les extensions des certificats X.509 et des requêtes de signature de certificat, consultez la documentation OpenSSL.

  2. Exécutez la commande openssl suivante pour générer une requête de signature de certificat et la clé privée correspondante:

    openssl req -newkey rsa:2048 -out csr.pem -keyout key.pem -config csr.cnf
    

    Cette commande génère les fichiers suivants:

    • csr.pem: votre requête de signature de certificat, prête à être envoyée à une autorité de certification.
    • key.pem: votre clé privée, que vous devez sécuriser

    Utilisez le fichier csr.pem dans votre demande de certificat.

Envoyer une demande de certificat à l'aide de la requête de signature de certificat

Pour demander un certificat à l'aide de la requête de signature de certificat, procédez comme suit:

Console

  1. Accédez à la page Certificate Authority Service de la console Google Cloud.

    Accéder à Certificate Authority Service

  2. Cliquez sur Demander un certificat.

  3. Sélectionnez une région. La région doit être identique à celle du pool d'autorités de certification que vous prévoyez d'utiliser.

  4. Sélectionnez un pool d'autorités de certification.

  5. Facultatif: Sélectionnez une autorité de certification spécifique dans le pool d'autorités de certification. Notez que lorsque vous choisissez un type CA pour l’émission de certificats, vous créez une dépendance sur cette AC, ce qui la rend plus difficile effectuer la rotation des CA.

  6. Facultatif: choisissez un modèle de certificat. Si vous utilisez un modèle de certificat, assurez-vous que les règles du modèle de certificat n'entrent pas en conflit avec du pool d'autorités de certification sélectionné.

  7. Cliquez sur Fournir une demande de signature de certificat (CSR), puis sur Suivant. Les détails du certificat s'affichent.

  8. Facultatif: Pour écraser le certificat généré automatiquement nom personnalisé, saisissez le nom personnalisé dans le champ Nom du certificat. Après le certificat créé, vous ne pouvez pas le supprimer ni le réutiliser son nom.

  9. Facultatif: Pour choisir une période de validité personnalisée pour le certificat, saisissez la valeur du champ Valide pour.

  10. Copiez et collez votre requête de signature de certificat dans la zone CSR de certificat. Si vous voulez Pour importer un fichier contenant la requête de signature de certificat, cliquez sur Parcourir, puis sélectionnez votre fichier.

  11. Cliquez sur Générer un certificat.

Télécharger le certificat signé

  1. Pour voir le certificat généré, cliquez sur Afficher le certificat, puis sur Afficher.
  2. Pour copier le certificat, cliquez sur . Pour télécharger le certificat sous la forme d'un fichier .crt, cliquez sur Télécharger le certificat
  3. Facultatif: Pour télécharger la chaîne de certificats, cliquez sur Télécharger la chaîne de certificats
<ph type="x-smartling-placeholder">
</ph>

gcloud

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

Remplacez les éléments suivants :

  • CERT_ID: identifiant unique du certificat.
  • POOL_ID: nom du pool d'autorités de certification.
  • CSR_FILENAME: fichier qui stocke la requête de signature de certificat encodée au format PEM.

L'option --validity définit la durée de validité du certificat. Il s'agit d'un indicateur facultatif dont la valeur par défaut est de 30 jours.

Pour plus d'informations sur la commande gcloud privateca certificates create, consultez la page sur la commande 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. Générez une demande de signature de certificat (CSR) en utilisant la méthode de votre choix, comme openssl.

    Voici un exemple de requête de signature de certificat encodée pour 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. Demandez un certificat.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

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

Demander un certificat à l'aide d'une clé générée automatiquement

Console

Vous pouvez utiliser la console Google Cloud pour générer des certificats TLS côté client ou serveur.

  1. Accédez à la page Certificate Authority Service de la console Google Cloud.

    Accéder à Certificate Authority Service

  2. Cliquez sur Demander un certificat.

  3. Sélectionnez une région. La région doit être identique à celle du pool d'autorités de certification que vous prévoyez d'utiliser.

  4. Sélectionnez un pool d'autorités de certification.

  5. Cliquez sur Saisir les détails manuellement. Les détails du certificat s'affichent.

  6. Facultatif: Remplacez le nom du certificat généré automatiquement par un nom personnalisé un nom unique.

  7. Facultatif: Pour choisir une période de validité personnalisée pour le certificat, saisissez la valeur du champ Valide pour.

Ajouter un nom de domaine

  1. Sous Ajouter un nom de domaine, saisissez un nom de domaine dans le champ Nom de domaine 1. .
  2. Facultatif: Si vous souhaitez ajouter plusieurs noms de domaine, cliquez sur Ajouter , puis saisissez un autre nom de domaine dans le champ Nom de domaine 2.

Utilisation étendue des clés

  1. Facultatif: Sous Utilisation étendue de la clé, sélectionnez l'une des options suivantes en fonction de votre cas d'utilisation:

    • TLS client: ces certificats vous permettent d'authentifier l'identité un demandeur.
    • TLS du serveur: ces certificats vous permettent d'authentifier l'identité d'un serveur.
  2. Cliquez sur Suivant.

Configurer l'algorithme et la taille de clé

  1. Facultatif: Sous Configurer la taille et l'algorithme de la clé, sélectionnez l'option de signature la taille de clé et l'algorithme de la liste. Si vous ignorez cette étape, RSASSA-PSS utilise une clé de 2 048 bits avec un condensé SHA 256. Pour plus d'informations sur la sélection d'une clé de signature et d'un algorithme, consultez Choisir un algorithme de clé.
  2. Cliquez sur Générer un certificat.

Télécharger le certificat signé

  1. Pour voir le certificat généré, cliquez sur Afficher le certificat, puis sur Afficher.
  2. Facultatif: Pour télécharger la chaîne de certificats encodée au format PEM, cliquez sur Télécharger la chaîne de certificats
  3. Facultatif: Pour télécharger la clé privée encodée au format PEM qui est associée, cliquez sur Téléchargez la clé privée.

gcloud

Pour utiliser la fonctionnalité de clé générée automatiquement, vous devez installer le package Python bibliothèque de l'autorité de chiffrement (PyCA). Pour savoir comment installer la bibliothèque de cryptographie Pyca, consultez Inclure la bibliothèque de cryptographie Pyca.

Pour créer un certificat, utilisez la commande gcloud suivante:

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"

Remplacez les éléments suivants :

  • POOL_ID: nom du pool d'autorités de certification.
  • KEY_FILENAME: chemin d'accès à l'emplacement du fichier de clé privée doit être écrit.
  • CERT_FILENAME: chemin d'accès où la valeur le fichier de chaîne de certificats doit être écrit. La chaîne de certificats est ordonné de l'entité de fin à la racine.
  • DNS_NAME: un ou plusieurs noms d'objet DNS (SAN) séparés par une virgule.
  • CERTIFICATE_PROFILE: identifiant unique du le profil de certificat. Par exemple, utilisez leaf_server_tls pour le protocole TLS du serveur d'entité de fin.

La commande gcloud mentionne les options suivantes:

  • --generate-key: génère une nouvelle clé privée RSA-2048 sur votre machine.

Vous pouvez également utiliser n'importe quelle combinaison des options suivantes:

  • --dns-san: permet de transmettre un ou plusieurs SAN DNS séparés par une virgule.
  • --ip-san: permet de transmettre un ou plusieurs réseaux IP SAN séparés par une virgule.
  • --uri-san: permet de transmettre un ou plusieurs URI SAN séparés par une virgule.
  • --subject: permet de transmettre un nom X.501 du certificat. l'objet.

Pour plus d'informations sur la commande gcloud privateca certificates create, consultez la page sur la commande gcloud privateca certificate create.

Go

Pour vous authentifier auprès du service CA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

Pour vous authentifier auprès du service CA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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

Pour vous authentifier auprès du service CA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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)

Demander un certificat à l'aide d'une clé Cloud KMS existante

Vous ne pouvez utiliser la Google Cloud CLI que pour demander des certificats à l'aide d'une clé Cloud KMS.

gcloud

Pour créer un certificat TLS du serveur d'entité finale à l'aide d'une clé Cloud KMS, exécutez la commande suivante:

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"

Remplacez les éléments suivants :

  • POOL_ID: nom du pool d'autorités de certification.
  • PROJECT_ID : ID du projet
  • LOCATION_ID: emplacement du trousseau de clés
  • KEY_RING: nom du trousseau de clés dans lequel la clé se trouve.
  • KEY : nom de la clé.
  • KEY_VERSION: version de la clé.
  • CERT_FILENAME: chemin d'accès au fichier encodé au format PEM de la chaîne de certificats. Le fichier de chaîne de certificats est trié par entité de fin à la racine.
  • DNS_NAME: réseaux SAN DNS séparés par une virgule.

Émettre un certificat à partir d'une autorité de certification spécifique dans un pool d'autorités de certification

Cette section explique comment émettre des certificats à partir d'une autorité de certification spécifique dans un pool d'autorités de certification.

Console

  1. Accédez à la page Certificate Authority Service de la console Google Cloud.

    Accéder à Certificate Authority Service

  2. Cliquez sur Demander un certificat.

  3. Sélectionnez une région. La région doit être identique à celle du pool d'autorités de certification que vous prévoyez d'utiliser.

  4. Sélectionnez un pool d'autorités de certification.

  5. Pour choisir une autorité de certification, cliquez sur Utiliser une autorité de certification spécifique de ce pool d'autorités de certification, puis sélectionnez une autorité de certification de la liste.

  6. Sélectionnez d'autres paramètres comme vous l'avez fait dans la section Demander un certificat à l'aide d'une clé générée automatiquement ou Demander un certificat à l'aide d'une requête de signature de certificat. .

gcloud

Pour cibler une autorité de certification spécifique dans le pool d'autorités de certification en vue de l'émission du certificat, ajoutez le l'option --ca avec le CA_ID de l'autorité de certification qui doit émettre le certificat ;

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"

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
}

Demander un certificat en mode validation

Demander un certificat en mode validation crée un test non signé certificat. Ce certificat de test n'est pas encodé au format PEM et n'entraîne aucuns frais. Bien que vous ne puissiez pas télécharger le certificat, la description du certificat fictif vous permet de vérifier que vous pouvez émettre un certificat signé avec le certificat paramètres.

Pour demander un certificat en mode validation, procédez comme suit:

Console

  1. Accédez à la page Certificate Authority Service de la console Google Cloud.

    Accéder à Certificate Authority Service

  2. Cliquez sur Demander un certificat.

  3. Sélectionnez Utiliser le mode validation pour une description de certificat fictif au lieu d'un certificat signé.

  4. Suivez la même procédure que pour demander un certificat signé.

Étape suivante