Requesting certificates
This topic describes how you can request a certificate from Certificate Authority Service and view the issued certificates.
Before you begin
Make sure you have the CA Service Certificate Requester
(roles/privateca.certificateRequester
) or the CA Service
Certificate Manager (roles/privateca.certificateManager
) IAM
role. For more information about the predefined IAM roles for
CA Service, see Predefined roles.
For information about granting an IAM role to a principal, see Grant a single role.
Overview
You can request a certificate using the following methods:
- Generate your own private/public key and submit a Certificate Signing Request (CSR).
- Have CA Service create a private/public key for you.
- Use an existing Cloud Key Management Service (Cloud KMS) key.
Using a CSR
Before you proceed, you must generate a CSR. After generating a CSR, do the following:
Console
Go to the Certificate Authority Service page on the Google Cloud console.
Click the CA Manager tab.
Click the name of the CA you want to issue from.
On the bottom of the CA details page, click Request a certificate.
Optional: If you want to use a certificate template, click , select a template from the list, and click Save.
Click Provide CSR.
Optional: To overwrite the automatically generated certificate name, enter the custom name in the Certificate name field.
Optional: To choose a custom validity period for the certificate, enter the value in the Valid for field.
Copy and paste your CSR to the Certificate CSR box. To upload the CSR, click Browse.
Click Next.
Download the signed certificate
- To copy the certificate, click
.crt
file, click Download certificate.
.
To download the certificate in the form of a - Optional: To download the certificate chain, click Download certificate chain.
- Click Done.
gcloud
gcloud privateca certificates create CERT_ID \
--issuer-pool POOL_ID \
--csr CSR_FILENAME \
--cert-output-file CERT_FILENAME \
--validity "P30D"
Replace the following:
- CERT_ID: The unique identifier of the certificate.
- POOL_ID: The name of the CA pool.
- CSR_FILENAME: The file that stores the PEM-encoded CSR.
The --validity
flag defines the duration the certificate is valid. It is an optional flag whose default value is 30 days.
For more information about the gcloud privateca certificates create
command, see gcloud privateca certificates create.
Terraform
REST API
Generate a Certificate Signing Request (CSR) using your preferred method, such as
openssl
.The following is a sample CSR that is encoded for 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-----
Request a certificate.
HTTP method and URL:
POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificates?certificate_id=CERTIFICATE_ID
Request JSON body:
{ "lifetime": { "seconds": 3600, "nanos": 0 }, "pem_csr": "PEM_CSR" }
To send your request, expand one of these options:
You should receive a JSON response similar to the following:
{ "name": "projects/project-id/locations/location/certificateAuthorities/ca-id/certificates/certificate-id", "pemCertificate": "-----BEGIN CERTIFICATE-----...", "certificateDescription": {...} }
Using an auto-generated key
Console
You can use Google Cloud console to generate client or server TLS certificates.
In the Google Cloud console, go to the Certificate Authority Service page.
Click the CA Manager tab.
Click the name of the CA you want to issue from.
At the bottom of the Certificate authority details page, click Request a certificate.
Optional: If you want to use a certificate template, click , select a template from the list, and click Save.
Click Enter details.
Optional: Replace the auto-generated Certificate name with a custom name that is unique.
Optional: To choose a custom validity period for the certificate, enter the value in the Valid for field.
Add domain name
- Under Add domain name, enter a domain name in the Domain name 1 field.
- Optional: If you want to add more than one domain name, click Add Item, and enter another domain name in the Domain name 2 field.
Extended key usage
Optional: Under Extended key usage, select between the following options based on your use case:
- Server TLS: These certificates let you authenticate the identity of a server.
- Client TLS: These certificates let you authenticate the identity of a requester.
Click Next.
Configure the key size and algorithm
- Optional: Under Configure key size and algorithm, select the signing key size and algorithm from the list. If you skip this step, RSASSA-PSS 2048 bit key with a SHA 256 digest is used. For information about selecting a signing key and algorithm, see Choosing a key algorithm.
- Click Continue.
Download the signed certificate
- Optional: To download the PEM-encoded certificate chain, click Download certificate chain.
Optional: To download the associated PEM-encoded private key, click Download private key.
Click Done.
gcloud
To use the auto-generated key functionality, you need to install the Python Cryptographic Authority (PyCA) library. For instructions about installing the Pyca cryptography library, see Including the Pyca cryptography library.
To create a certificate, use the following gcloud
command:
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"
Replace the following:
- POOL_ID: The name of the CA pool.
- KEY_FILENAME: The path where the generated private key file must be written.
- CERT_FILENAME: The path where the PEM-encoded certificate chain file must be written. The certificate chain is ordered from end-entity to root.
- DNS_NAME: One or more comma-separated DNS subject alternative names (SANs).
- CERTIFICATE_PROFILE: The unique identifier of
the certificate profile.
For example, use
leaf_server_tls
for end-entity server TLS.
The gcloud
command mentions the following flags:
--generate-key
: Generates a new RSA-2048 private key on your machine.
You can also use any combination of the following flags:
--dns-san
: Lets you pass one or more comma-separated DNS SANs.--ip-san
: Lets you pass one or more comma-separated IP SANs.--uri-san
: Lets you pass one or more comma-separated URI SANs.--subject
: Lets you pass an X.501 name of the certificate subject.
For more information about the gcloud privateca certificates create
command, see gcloud privateca certificates create.
Go
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Java
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Using an existing Cloud KMS key
To use a Cloud KMS key to create an end-entity server TLS certificate, run the following command:
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"
Replace the following:
- POOL_ID: The name of the CA pool.
- PROJECT_ID: The project ID.
- LOCATION_ID: The location of the key ring.
- KEY_RING: The name of the key ring where the key is located.
- KEY: The name of the key.
- KEY_VERSION: The version of the key.
- CERT_FILENAME: The path of the PEM-encoded certificate chain file. The certificate chain file is ordered from end-entity to root.
- DNS_NAME: Comma-separated DNS SANs.
Performing common operations with certificates
This section describes how you can perform certain common operations with certificates.
Issue a certificate from a specific CA in a CA pool
gcloud
To target a specific CA in the CA pool for certificate issuance, add the
--ca
flag with the CA_ID of the CA that must issue the certificate.
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
The Google Cloud console only supports certificate issuance from a particular CA. Use the instructions in the Use an auto-generated Key section or the Use a CSR section to choose the CA that must issue the certificate.
Terraform
View issued certificates
Console
In the Google Cloud console, go to the Certificate Authority Service page.
Click the CA manager tab.
On the Certificate authorities page, click the name of the CA.
At the bottom of the Certificate authority details page, click View issued certificates to view the list of certificates issued by the CA.
You can see the certificates on the All certificates page. The details include the status of the certificate, issuing CA, the CA pool that contains the CA, the certificate's expiration date, and more.
gcloud
To list all certificates issued by a particular CA in a CA pool, use the following gcloud
command:
gcloud privateca certificates list --issuer-pool ISSUER_POOL --ca CA_NAME
For more information about the gcloud privateca certificates list
command, see gcloud privateca certificates list.
To list all certificates across all CAs in a given location, use the following gcloud
command:
gcloud privateca certificates list --location LOCATION
Go
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Java
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
Python
To authenticate to CA Service, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.
View details for a single certificate
Console
In the Google Cloud console, go to the Certificate Authority Service page.
Pick your target CA under the CA Manager tab.
Click the CA name.
At the bottom of the Certificate authority details page, click View issued certificates to see the list of issued certificates.
Click
in the Actions column for the certificate you want to download.Under Download, click Certificate. You can download the certificate chain by clicking Certificate chain.
gcloud
To see the full description of a certificate, run the following command:
gcloud privateca certificates describe CERT_NAME \
--issuer-pool POOL_ID
For more information about the gcloud privateca certificates describe
command, see gcloud privateca certificates describe.
To export the PEM-encoded X.509 certificate chain and to a file, run the following command:
gcloud privateca certificates export CERT_NAME \
--issuer-pool POOL_ID \
--include-chain \
--output-file certificate-file
For more information about the gcloud privateca certificates export
command, see gcloud privateca certificates export.
Proof-of-possession for certificates
Proof-of-possession of the private key ensures that the requester of a certificate holds the private key for that certificate. CA Service checks proof-of-possession only if the requester provides a PKCS #10 CSR according to RFC 2986. Proof-of-possession for other forms of certificate requests, such as requests by CertificateConfig is not enforced.
It is the responsibility of client applications that accept certificates to validate whether the certificate holder possesses the private key of that certificate. Enforcing proof-of-possession checks during certificate issuance is a form of defense-in-depth to protect against misbehaving clients. The existence of such clients, regardless of whether the CA checks proof-of-possession, could constitute a security vulnerability.
What's next
- Learn about certificate profiles.
- Learn how to revoke certificates.
- Learn how to sort and filter certificates.
- Learn how to manage certificates using the Google Cloud CLI.