// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.cloud.security.privateca.v1beta1; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.Security.PrivateCA.V1Beta1"; option go_package = "cloud.google.com/go/security/privateca/apiv1beta1/privatecapb;privatecapb"; option java_multiple_files = true; option java_outer_classname = "PrivateCaResourcesProto"; option java_package = "com.google.cloud.security.privateca.v1beta1"; option php_namespace = "Google\\Cloud\\Security\\PrivateCA\\V1beta1"; option ruby_package = "Google::Cloud::Security::PrivateCA::V1beta1"; // A [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] represents an individual Certificate Authority. // A [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] can be used to create [Certificates][google.cloud.security.privateca.v1beta1.Certificate]. message CertificateAuthority { option (google.api.resource) = { type: "privateca.googleapis.com/CertificateAuthority" pattern: "projects/{project}/locations/{location}/certificateAuthorities/{certificate_authority}" }; // Options that affect all certificates issued by a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. message IssuingOptions { // Required. When true, includes a URL to the issuing CA certificate in the // "authority information access" X.509 extension. bool include_ca_cert_url = 1 [(google.api.field_behavior) = REQUIRED]; // Required. When true, includes a URL to the CRL corresponding to certificates // issued from a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. // CRLs will expire 7 days from their creation. However, we will rebuild // daily. CRLs are also rebuilt shortly after a certificate is revoked. bool include_crl_access_url = 2 [(google.api.field_behavior) = REQUIRED]; } // The issuing policy for a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] will not be successfully issued from this // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] if they violate the policy. message CertificateAuthorityPolicy { message AllowedConfigList { // Required. All [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] // must match at least one listed [ReusableConfigWrapper][google.cloud.security.privateca.v1beta1.ReusableConfigWrapper]. If a // [ReusableConfigWrapper][google.cloud.security.privateca.v1beta1.ReusableConfigWrapper] has an empty field, any value will be // allowed for that field. repeated ReusableConfigWrapper allowed_config_values = 1 [(google.api.field_behavior) = REQUIRED]; } // [AllowedSubjectAltNames][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.AllowedSubjectAltNames] specifies the allowed values for // [SubjectAltNames][google.cloud.security.privateca.v1beta1.SubjectAltNames] by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] when issuing // [Certificates][google.cloud.security.privateca.v1beta1.Certificate]. message AllowedSubjectAltNames { // Optional. Contains valid, fully-qualified host names. Glob patterns are also // supported. To allow an explicit wildcard certificate, escape with // backlash (i.e. `\*`). // E.g. for globbed entries: `*bar.com` will allow `foo.bar.com`, but not // `*.bar.com`, unless the [allow_globbing_dns_wildcards][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.AllowedSubjectAltNames.allow_globbing_dns_wildcards] field is set. // E.g. for wildcard entries: `\*.bar.com` will allow `*.bar.com`, but not // `foo.bar.com`. repeated string allowed_dns_names = 1 [(google.api.field_behavior) = OPTIONAL]; // Optional. Contains valid RFC 3986 URIs. Glob patterns are also supported. To // match across path seperators (i.e. '/') use the double star glob // pattern (i.e. '**'). repeated string allowed_uris = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. Contains valid RFC 2822 E-mail addresses. Glob patterns are also // supported. repeated string allowed_email_addresses = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. Contains valid 32-bit IPv4 addresses and subnet ranges or RFC 4291 IPv6 // addresses and subnet ranges. Subnet ranges are specified using the // '/' notation (e.g. 10.0.0.0/8, 2001:700:300:1800::/64). Glob patterns // are supported only for ip address entries (i.e. not for subnet ranges). repeated string allowed_ips = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. Specifies if glob patterns used for [allowed_dns_names][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.AllowedSubjectAltNames.allowed_dns_names] allows // wildcard certificates. bool allow_globbing_dns_wildcards = 5 [(google.api.field_behavior) = OPTIONAL]; // Optional. Specifies if to allow custom X509Extension values. bool allow_custom_sans = 6 [(google.api.field_behavior) = OPTIONAL]; } // [IssuanceModes][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.IssuanceModes] specifies the allowed ways in which // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] may be requested from this // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. message IssuanceModes { // Required. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1beta1.Certificate] by // specifying a CSR. bool allow_csr_based_issuance = 1 [(google.api.field_behavior) = REQUIRED]; // Required. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1beta1.Certificate] by // specifying a [CertificateConfig][google.cloud.security.privateca.v1beta1.CertificateConfig]. bool allow_config_based_issuance = 2 [(google.api.field_behavior) = REQUIRED]; } // Allowed configurations or a single configuration for all issued // certificates. oneof config_policy { // Optional. All [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] // must match at least one listed [ReusableConfigWrapper][google.cloud.security.privateca.v1beta1.ReusableConfigWrapper] in the list. AllowedConfigList allowed_config_list = 1 [(google.api.field_behavior) = OPTIONAL]; // Optional. All [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] // will use the provided configuration values, overwriting any requested // configuration values. ReusableConfigWrapper overwrite_config_values = 2 [(google.api.field_behavior) = OPTIONAL]; } // Optional. If any [Subject][google.cloud.security.privateca.v1beta1.Subject] is specified here, then all // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] must // match at least one listed [Subject][google.cloud.security.privateca.v1beta1.Subject]. If a [Subject][google.cloud.security.privateca.v1beta1.Subject] has an empty // field, any value will be allowed for that field. repeated Subject allowed_locations_and_organizations = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. If any value is specified here, then all // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] must // match at least one listed value. If no value is specified, all values // will be allowed for this fied. Glob patterns are also supported. repeated string allowed_common_names = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. If a [AllowedSubjectAltNames][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.AllowedSubjectAltNames] is specified here, then all // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] issued by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] must // match [AllowedSubjectAltNames][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.AllowedSubjectAltNames]. If no value or an empty value // is specified, any value will be allowed for the [SubjectAltNames][google.cloud.security.privateca.v1beta1.SubjectAltNames] // field. AllowedSubjectAltNames allowed_sans = 5 [(google.api.field_behavior) = OPTIONAL]; // Optional. The maximum lifetime allowed by the [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. Note that // if the any part if the issuing chain expires before a [Certificate][google.cloud.security.privateca.v1beta1.Certificate]'s // requested maximum_lifetime, the effective lifetime will be explicitly // truncated. google.protobuf.Duration maximum_lifetime = 6 [(google.api.field_behavior) = OPTIONAL]; // Optional. If specified, then only methods allowed in the [IssuanceModes][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy.IssuanceModes] may be // used to issue [Certificates][google.cloud.security.privateca.v1beta1.Certificate]. IssuanceModes allowed_issuance_modes = 8 [(google.api.field_behavior) = OPTIONAL]; } // URLs where a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] will publish content. message AccessUrls { // The URL where this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s CA certificate is // published. This will only be set for CAs that have been activated. string ca_certificate_access_url = 1; // The URL where this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s CRLs are published. This // will only be set for CAs that have been activated. string crl_access_url = 2; } // A Cloud KMS key configuration that a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] will use. message KeyVersionSpec { oneof KeyVersion { // Required. The resource name for an existing Cloud KMS CryptoKeyVersion in the // format // `projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`. // This option enables full flexibility in the key's capabilities and // properties. string cloud_kms_key_version = 1 [(google.api.field_behavior) = REQUIRED]; // Required. The algorithm to use for creating a managed Cloud KMS key for a for a // simplified experience. All managed keys will be have their // [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] as `HSM`. SignHashAlgorithm algorithm = 2 [(google.api.field_behavior) = REQUIRED]; } } // The type of a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], indicating its issuing chain. enum Type { // Not specified. TYPE_UNSPECIFIED = 0; // Self-signed CA. SELF_SIGNED = 1; // Subordinate CA. Could be issued by a Private CA [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] // or an unmanaged CA. SUBORDINATE = 2; } // The tier of a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], indicating its supported // functionality and/or billing SKU. enum Tier { // Not specified. TIER_UNSPECIFIED = 0; // Enterprise tier. ENTERPRISE = 1; // DevOps tier. DEVOPS = 2; } // The state of a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], indicating if it can be used. enum State { // Not specified. STATE_UNSPECIFIED = 0; // Certificates can be issued from this CA. CRLs will be generated for this // CA. ENABLED = 1; // Certificates cannot be issued from this CA. CRLs will still be generated. DISABLED = 2; // Certificates cannot be issued from this CA. CRLs will not be generated. PENDING_ACTIVATION = 3; // Certificates cannot be issued from this CA. CRLs will not be generated. PENDING_DELETION = 4; } // The algorithm of a Cloud KMS CryptoKeyVersion of a // [CryptoKey][google.cloud.kms.v1.CryptoKey] with the // [CryptoKeyPurpose][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose] value // `ASYMMETRIC_SIGN`. These values correspond to the // [CryptoKeyVersionAlgorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm] // values. For RSA signing algorithms, the PSS algorithms should be preferred, // use PKCS1 algorithms if required for compatibility. For further // recommandations, see // https://cloud.google.com/kms/docs/algorithms#algorithm_recommendations. enum SignHashAlgorithm { // Not specified. SIGN_HASH_ALGORITHM_UNSPECIFIED = 0; // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_2048_SHA256 RSA_PSS_2048_SHA256 = 1; // maps to CryptoKeyVersionAlgorithm. RSA_SIGN_PSS_3072_SHA256 RSA_PSS_3072_SHA256 = 2; // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_4096_SHA256 RSA_PSS_4096_SHA256 = 3; // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_2048_SHA256 RSA_PKCS1_2048_SHA256 = 6; // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_3072_SHA256 RSA_PKCS1_3072_SHA256 = 7; // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_4096_SHA256 RSA_PKCS1_4096_SHA256 = 8; // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P256_SHA256 EC_P256_SHA256 = 4; // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P384_SHA384 EC_P384_SHA384 = 5; } // Output only. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] in the // format `projects/*/locations/*/certificateAuthorities/*`. string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // Required. Immutable. The [Type][google.cloud.security.privateca.v1beta1.CertificateAuthority.Type] of this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. Type type = 2 [ (google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE ]; // Required. Immutable. The [Tier][google.cloud.security.privateca.v1beta1.CertificateAuthority.Tier] of this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. Tier tier = 3 [ (google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE ]; // Required. Immutable. The config used to create a self-signed X.509 certificate or CSR. CertificateConfig config = 4 [ (google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE ]; // Required. The desired lifetime of the CA certificate. Used to create the // "not_before_time" and "not_after_time" fields inside an X.509 // certificate. google.protobuf.Duration lifetime = 5 [(google.api.field_behavior) = REQUIRED]; // Required. Immutable. Used when issuing certificates for this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. If this // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] is a self-signed CertificateAuthority, this key // is also used to sign the self-signed CA certificate. Otherwise, it // is used to sign a CSR. KeyVersionSpec key_spec = 6 [ (google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE ]; // Optional. The [CertificateAuthorityPolicy][google.cloud.security.privateca.v1beta1.CertificateAuthority.CertificateAuthorityPolicy] to enforce when issuing // [Certificates][google.cloud.security.privateca.v1beta1.Certificate] from this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. CertificateAuthorityPolicy certificate_policy = 7 [(google.api.field_behavior) = OPTIONAL]; // Optional. The [IssuingOptions][google.cloud.security.privateca.v1beta1.CertificateAuthority.IssuingOptions] to follow when issuing [Certificates][google.cloud.security.privateca.v1beta1.Certificate] // from this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. IssuingOptions issuing_options = 8 [(google.api.field_behavior) = OPTIONAL]; // Optional. If this is a subordinate [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], this field will be set // with the subordinate configuration, which describes its issuers. This may // be updated, but this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] must continue to validate. SubordinateConfig subordinate_config = 19 [(google.api.field_behavior) = OPTIONAL]; // Output only. The [State][google.cloud.security.privateca.v1beta1.CertificateAuthority.State] for this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. State state = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. This [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s certificate chain, including the current // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s certificate. Ordered such that the root issuer // is the final element (consistent with RFC 5246). For a self-signed CA, this // will only list the current [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s certificate. repeated string pem_ca_certificates = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. A structured description of this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]'s CA certificate // and its issuers. Ordered as self-to-root. repeated CertificateDescription ca_certificate_descriptions = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; // Immutable. The name of a Cloud Storage bucket where this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] will // publish content, such as the CA certificate and CRLs. This must be a bucket // name, without any prefixes (such as `gs://`) or suffixes (such as // `.googleapis.com`). For example, to use a bucket named `my-bucket`, you // would simply specify `my-bucket`. If not specified, a managed bucket will // be created. string gcs_bucket = 13 [(google.api.field_behavior) = IMMUTABLE]; // Output only. URLs for accessing content published by this CA, such as the CA certificate // and CRLs. AccessUrls access_urls = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] was created. google.protobuf.Timestamp create_time = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] was updated. google.protobuf.Timestamp update_time = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] will be deleted, if // scheduled for deletion. google.protobuf.Timestamp delete_time = 17 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Labels with user-defined metadata. map labels = 18 [(google.api.field_behavior) = OPTIONAL]; } // A [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] corresponds to a signed X.509 certificate // Revocation List (CRL). A CRL contains the serial numbers of certificates that // should no longer be trusted. message CertificateRevocationList { option (google.api.resource) = { type: "privateca.googleapis.com/CertificateRevocationList" pattern: "projects/{project}/locations/{location}/certificateAuthorities/{certificate_authority}/certificateRevocationLists/{certificate_revocation_list}" }; // Describes a revoked [Certificate][google.cloud.security.privateca.v1beta1.Certificate]. message RevokedCertificate { // The resource path for the [Certificate][google.cloud.security.privateca.v1beta1.Certificate] in the format // `projects/*/locations/*/certificateAuthorities/*/certificates/*`. string certificate = 1; // The serial number of the [Certificate][google.cloud.security.privateca.v1beta1.Certificate]. string hex_serial_number = 2; // The reason the [Certificate][google.cloud.security.privateca.v1beta1.Certificate] was revoked. RevocationReason revocation_reason = 3; } // The state of a [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList], indicating if it is current. enum State { // Not specified. STATE_UNSPECIFIED = 0; // The [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] is up to date. ACTIVE = 1; // The [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] is no longer current. SUPERSEDED = 2; } // Output only. The resource path for this [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] in // the format // `projects/*/locations/*/certificateAuthorities/*/ // certificateRevocationLists/*`. string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The CRL sequence number that appears in pem_crl. int64 sequence_number = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The revoked serial numbers that appear in pem_crl. repeated RevokedCertificate revoked_certificates = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The PEM-encoded X.509 CRL. string pem_crl = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The location where 'pem_crl' can be accessed. string access_url = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The [State][google.cloud.security.privateca.v1beta1.CertificateRevocationList.State] for this [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList]. State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] was created. google.protobuf.Timestamp create_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1beta1.CertificateRevocationList] was updated. google.protobuf.Timestamp update_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Labels with user-defined metadata. map labels = 9 [(google.api.field_behavior) = OPTIONAL]; } // A [Certificate][google.cloud.security.privateca.v1beta1.Certificate] corresponds to a signed X.509 certificate issued by a // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. message Certificate { option (google.api.resource) = { type: "privateca.googleapis.com/Certificate" pattern: "projects/{project}/locations/{location}/certificateAuthorities/{certificate_authority}/certificates/{certificate}" }; // Describes fields that are relavent to the revocation of a [Certificate][google.cloud.security.privateca.v1beta1.Certificate]. message RevocationDetails { // Indicates why a [Certificate][google.cloud.security.privateca.v1beta1.Certificate] was revoked. RevocationReason revocation_state = 1; // The time at which this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] was revoked. google.protobuf.Timestamp revocation_time = 2; } // Output only. The resource path for this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] in the format // `projects/*/locations/*/certificateAuthorities/*/certificates/*`. string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // The config used to create a signed X.509 certificate. oneof certificate_config { // Immutable. A pem-encoded X.509 certificate signing request (CSR). string pem_csr = 2 [(google.api.field_behavior) = IMMUTABLE]; // Immutable. A description of the certificate and key that does not require X.509 or // ASN.1. CertificateConfig config = 3 [(google.api.field_behavior) = IMMUTABLE]; } // Required. Immutable. The desired lifetime of a certificate. Used to create the // "not_before_time" and "not_after_time" fields inside an X.509 // certificate. Note that the lifetime may be truncated if it would extend // past the life of any certificate authority in the issuing chain. google.protobuf.Duration lifetime = 4 [ (google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE ]; // Output only. Details regarding the revocation of this [Certificate][google.cloud.security.privateca.v1beta1.Certificate]. This // [Certificate][google.cloud.security.privateca.v1beta1.Certificate] is considered revoked if and only if this field is present. RevocationDetails revocation_details = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The pem-encoded, signed X.509 certificate. string pem_certificate = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. A structured description of the issued X.509 certificate. CertificateDescription certificate_description = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The chain that may be used to verify the X.509 certificate. Expected to be // in issuer-to-root order according to RFC 5246. repeated string pem_certificate_chain = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] was created. google.protobuf.Timestamp create_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] was updated. google.protobuf.Timestamp update_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Labels with user-defined metadata. map labels = 11 [(google.api.field_behavior) = OPTIONAL]; } // A [ReusableConfig][google.cloud.security.privateca.v1beta1.ReusableConfig] refers to a managed [ReusableConfigValues][google.cloud.security.privateca.v1beta1.ReusableConfigValues]. Those, in // turn, are used to describe certain fields of an X.509 certificate, such as // the key usage fields, fields specific to CA certificates, certificate policy // extensions and custom extensions. message ReusableConfig { option (google.api.resource) = { type: "privateca.googleapis.com/ReusableConfig" pattern: "projects/{project}/locations/{location}/reusableConfigs/{reusable_config}" }; // Output only. The resource path for this [ReusableConfig][google.cloud.security.privateca.v1beta1.ReusableConfig] in the format // `projects/*/locations/*/reusableConfigs/*`. string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // Required. The config values. ReusableConfigValues values = 2 [(google.api.field_behavior) = REQUIRED]; // Optional. A human-readable description of scenarios these ReusableConfigValues may be // compatible with. string description = 3 [(google.api.field_behavior) = OPTIONAL]; // Output only. The time at which this [ReusableConfig][google.cloud.security.privateca.v1beta1.ReusableConfig] was created. google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time at which this [ReusableConfig][google.cloud.security.privateca.v1beta1.ReusableConfig] was updated. google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Labels with user-defined metadata. map labels = 6 [(google.api.field_behavior) = OPTIONAL]; } // A [ReusableConfigValues][google.cloud.security.privateca.v1beta1.ReusableConfigValues] is used to describe certain fields of an // X.509 certificate, such as the key usage fields, fields specific to CA // certificates, certificate policy extensions and custom extensions. message ReusableConfigValues { // Describes values that are relevant in a CA certificate. message CaOptions { // Optional. Refers to the "CA" X.509 extension, which is a boolean value. When this // value is missing, the extension will be omitted from the CA certificate. google.protobuf.BoolValue is_ca = 1 [(google.api.field_behavior) = OPTIONAL]; // Optional. Refers to the path length restriction X.509 extension. For a CA // certificate, this value describes the depth of subordinate CA // certificates that are allowed. // If this value is less than 0, the request will fail. // If this value is missing, the max path length will be omitted from the // CA certificate. google.protobuf.Int32Value max_issuer_path_length = 2 [(google.api.field_behavior) = OPTIONAL]; } // Optional. Indicates the intended use for keys that correspond to a certificate. KeyUsage key_usage = 1 [(google.api.field_behavior) = OPTIONAL]; // Optional. Describes options in this [ReusableConfigValues][google.cloud.security.privateca.v1beta1.ReusableConfigValues] that are // relevant in a CA certificate. CaOptions ca_options = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. Describes the X.509 certificate policy object identifiers, per // https://tools.ietf.org/html/rfc5280#section-4.2.1.4. repeated ObjectId policy_ids = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. Describes Online Certificate Status Protocol (OCSP) endpoint addresses // that appear in the "Authority Information Access" extension in the // certificate. repeated string aia_ocsp_servers = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. Describes custom X.509 extensions. repeated X509Extension additional_extensions = 5 [(google.api.field_behavior) = OPTIONAL]; } // A [ReusableConfigWrapper][google.cloud.security.privateca.v1beta1.ReusableConfigWrapper] describes values that may assist in creating an // X.509 certificate, or a reference to a pre-defined set of values. message ReusableConfigWrapper { // Reusable or inline config values. oneof config_values { // Required. A resource path to a [ReusableConfig][google.cloud.security.privateca.v1beta1.ReusableConfig] in the format // `projects/*/locations/*/reusableConfigs/*`. string reusable_config = 1 [(google.api.field_behavior) = REQUIRED]; // Required. A user-specified inline [ReusableConfigValues][google.cloud.security.privateca.v1beta1.ReusableConfigValues]. ReusableConfigValues reusable_config_values = 2 [(google.api.field_behavior) = REQUIRED]; } } // Describes a subordinate CA's issuers. This is either a resource path to a // known issuing [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], or a PEM issuer certificate chain. message SubordinateConfig { // This message describes a subordinate CA's issuer certificate chain. This // wrapper exists for compatibility reasons. message SubordinateConfigChain { // Required. Expected to be in leaf-to-root order according to RFC 5246. repeated string pem_certificates = 1 [(google.api.field_behavior) = REQUIRED]; } oneof subordinate_config { // Required. This can refer to a [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] in the same project that // was used to create a subordinate [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority]. This field // is used for information and usability purposes only. The resource name // is in the format `projects/*/locations/*/certificateAuthorities/*`. string certificate_authority = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Contains the PEM certificate chain for the issuers of this // [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority], but not pem certificate for this CA itself. SubordinateConfigChain pem_issuer_chain = 2 [(google.api.field_behavior) = REQUIRED]; } } // A [PublicKey][google.cloud.security.privateca.v1beta1.PublicKey] describes a public key. message PublicKey { // Types of public keys that are supported. // At a minimum, we support RSA and ECDSA, for the key sizes or curves listed: // https://cloud.google.com/kms/docs/algorithms#asymmetric_signing_algorithms enum KeyType { // Default unspecified value. KEY_TYPE_UNSPECIFIED = 0; // A PEM-encoded PKCS#1/RFC 3447 RSAPrivateKey structure. PEM_RSA_KEY = 1; // A PEM-encoded compressed NIST P-256/secp256r1/prime256v1 or P-384 key. PEM_EC_KEY = 2; } // Required. The type of public key. KeyType type = 1 [(google.api.field_behavior) = REQUIRED]; // Required. A public key. Padding and encoding varies by 'KeyType' and is described // along with the KeyType values. bytes key = 2 [(google.api.field_behavior) = REQUIRED]; } // A [CertificateConfig][google.cloud.security.privateca.v1beta1.CertificateConfig] describes an X.509 certificate or CSR that is to be // created, as an alternative to using ASN.1. message CertificateConfig { // These values are used to create the distinguished name and subject // alternative name fields in an X.509 certificate. message SubjectConfig { // Required. Contains distinguished name fields such as the location and organization. Subject subject = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. The "common name" of the distinguished name. string common_name = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. The subject alternative name fields. SubjectAltNames subject_alt_name = 3 [(google.api.field_behavior) = OPTIONAL]; } // Required. Specifies some of the values in a certificate that are related to the // subject. SubjectConfig subject_config = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Describes how some of the technical fields in a certificate should be // populated. ReusableConfigWrapper reusable_config = 2 [(google.api.field_behavior) = REQUIRED]; // Optional. The public key that corresponds to this config. This is, for example, used // when issuing [Certificates][google.cloud.security.privateca.v1beta1.Certificate], but not when creating a // self-signed [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] or [CertificateAuthority][google.cloud.security.privateca.v1beta1.CertificateAuthority] CSR. PublicKey public_key = 3 [(google.api.field_behavior) = OPTIONAL]; } // A [CertificateDescription][google.cloud.security.privateca.v1beta1.CertificateDescription] describes an X.509 certificate or CSR that has // been issued, as an alternative to using ASN.1 / X.509. message CertificateDescription { // These values describe fields in an issued X.509 certificate such as the // distinguished name, subject alternative names, serial number, and lifetime. message SubjectDescription { // Contains distinguished name fields such as the location and organization. Subject subject = 1; // The "common name" of the distinguished name. string common_name = 2; // The subject alternative name fields. SubjectAltNames subject_alt_name = 3; // The serial number encoded in lowercase hexadecimal. string hex_serial_number = 4; // For convenience, the actual lifetime of an issued certificate. // Corresponds to 'not_after_time' - 'not_before_time'. google.protobuf.Duration lifetime = 5; // The time at which the certificate becomes valid. google.protobuf.Timestamp not_before_time = 6; // The time at which the certificate expires. google.protobuf.Timestamp not_after_time = 7; } // A KeyId identifies a specific public key, usually by hashing the public // key. message KeyId { // Optional. The value of this KeyId encoded in lowercase hexadecimal. This is most // likely the 160 bit SHA-1 hash of the public key. string key_id = 1 [(google.api.field_behavior) = OPTIONAL]; } // A group of fingerprints for the x509 certificate. message CertificateFingerprint { // The SHA 256 hash, encoded in hexadecimal, of the DER x509 certificate. string sha256_hash = 1; } // Describes some of the values in a certificate that are related to the // subject and lifetime. SubjectDescription subject_description = 1; // Describes some of the technical fields in a certificate. ReusableConfigValues config_values = 2; // The public key that corresponds to an issued certificate. PublicKey public_key = 3; // Provides a means of identifiying certificates that contain a particular // public key, per https://tools.ietf.org/html/rfc5280#section-4.2.1.2. KeyId subject_key_id = 4; // Identifies the subject_key_id of the parent certificate, per // https://tools.ietf.org/html/rfc5280#section-4.2.1.1 KeyId authority_key_id = 5; // Describes a list of locations to obtain CRL information, i.e. // the DistributionPoint.fullName described by // https://tools.ietf.org/html/rfc5280#section-4.2.1.13 repeated string crl_distribution_points = 6; // Describes lists of issuer CA certificate URLs that appear in the // "Authority Information Access" extension in the certificate. repeated string aia_issuing_certificate_urls = 7; // The hash of the x.509 certificate. CertificateFingerprint cert_fingerprint = 8; } // An [ObjectId][google.cloud.security.privateca.v1beta1.ObjectId] specifies an object identifier (OID). These provide context // and describe types in ASN.1 messages. message ObjectId { // Required. The parts of an OID path. The most significant parts of the path come // first. repeated int32 object_id_path = 1 [(google.api.field_behavior) = REQUIRED]; } // An [X509Extension][google.cloud.security.privateca.v1beta1.X509Extension] specifies an X.509 extension, which may be used in // different parts of X.509 objects like certificates, CSRs, and CRLs. message X509Extension { // Required. The OID for this X.509 extension. ObjectId object_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Indicates whether or not this extension is critical (i.e., if the client // does not know how to handle this extension, the client should consider this // to be an error). bool critical = 2 [(google.api.field_behavior) = REQUIRED]; // Required. The value of this X.509 extension. bytes value = 3 [(google.api.field_behavior) = REQUIRED]; } // A [KeyUsage][google.cloud.security.privateca.v1beta1.KeyUsage] describes key usage values that may appear in an X.509 // certificate. message KeyUsage { // [KeyUsage.KeyUsageOptions][google.cloud.security.privateca.v1beta1.KeyUsage.KeyUsageOptions] corresponds to the key usage values // described in https://tools.ietf.org/html/rfc5280#section-4.2.1.3. message KeyUsageOptions { // The key may be used for digital signatures. bool digital_signature = 1; // The key may be used for cryptographic commitments. Note that this may // also be referred to as "non-repudiation". bool content_commitment = 2; // The key may be used to encipher other keys. bool key_encipherment = 3; // The key may be used to encipher data. bool data_encipherment = 4; // The key may be used in a key agreement protocol. bool key_agreement = 5; // The key may be used to sign certificates. bool cert_sign = 6; // The key may be used sign certificate revocation lists. bool crl_sign = 7; // The key may be used to encipher only. bool encipher_only = 8; // The key may be used to decipher only. bool decipher_only = 9; } // [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1beta1.KeyUsage.ExtendedKeyUsageOptions] has fields that correspond to // certain common OIDs that could be specified as an extended key usage value. message ExtendedKeyUsageOptions { // Corresponds to OID 1.3.6.1.5.5.7.3.1. Officially described as "TLS WWW // server authentication", though regularly used for non-WWW TLS. bool server_auth = 1; // Corresponds to OID 1.3.6.1.5.5.7.3.2. Officially described as "TLS WWW // client authentication", though regularly used for non-WWW TLS. bool client_auth = 2; // Corresponds to OID 1.3.6.1.5.5.7.3.3. Officially described as "Signing of // downloadable executable code client authentication". bool code_signing = 3; // Corresponds to OID 1.3.6.1.5.5.7.3.4. Officially described as "Email // protection". bool email_protection = 4; // Corresponds to OID 1.3.6.1.5.5.7.3.8. Officially described as "Binding // the hash of an object to a time". bool time_stamping = 5; // Corresponds to OID 1.3.6.1.5.5.7.3.9. Officially described as "Signing // OCSP responses". bool ocsp_signing = 6; } // Describes high-level ways in which a key may be used. KeyUsageOptions base_key_usage = 1; // Detailed scenarios in which a key may be used. ExtendedKeyUsageOptions extended_key_usage = 2; // Used to describe extended key usages that are not listed in the // [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1beta1.KeyUsage.ExtendedKeyUsageOptions] message. repeated ObjectId unknown_extended_key_usages = 3; } // [Subject][google.cloud.security.privateca.v1beta1.Subject] describes parts of a distinguished name that, in turn, // describes the subject of the certificate. message Subject { // The country code of the subject. string country_code = 1; // The organization of the subject. string organization = 2; // The organizational_unit of the subject. string organizational_unit = 3; // The locality or city of the subject. string locality = 4; // The province, territory, or regional state of the subject. string province = 5; // The street address of the subject. string street_address = 6; // The postal code of the subject. string postal_code = 7; } // [SubjectAltNames][google.cloud.security.privateca.v1beta1.SubjectAltNames] corresponds to a more modern way of listing what // the asserted identity is in a certificate (i.e., compared to the "common // name" in the distinguished name). message SubjectAltNames { // Contains only valid, fully-qualified host names. repeated string dns_names = 1; // Contains only valid RFC 3986 URIs. repeated string uris = 2; // Contains only valid RFC 2822 E-mail addresses. repeated string email_addresses = 3; // Contains only valid 32-bit IPv4 addresses or RFC 4291 IPv6 addresses. repeated string ip_addresses = 4; // Contains additional subject alternative name values. repeated X509Extension custom_sans = 5; } // A [RevocationReason][google.cloud.security.privateca.v1beta1.RevocationReason] indicates whether a [Certificate][google.cloud.security.privateca.v1beta1.Certificate] has been revoked, // and the reason for revocation. These correspond to standard revocation // reasons from RFC 5280. Note that the enum labels and values in this // definition are not the same ASN.1 values defined in RFC 5280. These values // will be translated to the correct ASN.1 values when a CRL is created. enum RevocationReason { // Default unspecified value. This value does indicate that a [Certificate][google.cloud.security.privateca.v1beta1.Certificate] // has been revoked, but that a reason has not been recorded. REVOCATION_REASON_UNSPECIFIED = 0; // Key material for this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] may have leaked. KEY_COMPROMISE = 1; // The key material for a certificate authority in the issuing path may have // leaked. CERTIFICATE_AUTHORITY_COMPROMISE = 2; // The subject or other attributes in this [Certificate][google.cloud.security.privateca.v1beta1.Certificate] have changed. AFFILIATION_CHANGED = 3; // This [Certificate][google.cloud.security.privateca.v1beta1.Certificate] has been superseded. SUPERSEDED = 4; // This [Certificate][google.cloud.security.privateca.v1beta1.Certificate] or entities in the issuing path have ceased to // operate. CESSATION_OF_OPERATION = 5; // This [Certificate][google.cloud.security.privateca.v1beta1.Certificate] should not be considered valid, it is expected that it // may become valid in the future. CERTIFICATE_HOLD = 6; // This [Certificate][google.cloud.security.privateca.v1beta1.Certificate] no longer has permission to assert the listed // attributes. PRIVILEGE_WITHDRAWN = 7; // The authority which determines appropriate attributes for a [Certificate][google.cloud.security.privateca.v1beta1.Certificate] // may have been compromised. ATTRIBUTE_AUTHORITY_COMPROMISE = 8; }