mirror of https://github.com/hashicorp/consul
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
7.5 KiB
193 lines
7.5 KiB
// Copyright (c) HashiCorp, Inc. |
|
// SPDX-License-Identifier: BUSL-1.1 |
|
|
|
syntax = "proto3"; |
|
|
|
package hashicorp.consul.internal.connect; |
|
|
|
import "google/protobuf/timestamp.proto"; |
|
import "private/pbcommon/common.proto"; |
|
|
|
// CARoots is the list of all currently trusted CA Roots. |
|
// |
|
// mog annotation: |
|
// |
|
// target=github.com/hashicorp/consul/agent/structs.IndexedCARoots |
|
// output=connect.gen.go |
|
// name=StructsIndexedCARoots |
|
message CARoots { |
|
// ActiveRootID is the ID of a root in Roots that is the active CA root. |
|
// Other roots are still valid if they're in the Roots list but are in |
|
// the process of being rotated out. |
|
string ActiveRootID = 1; |
|
|
|
// TrustDomain is the identification root for this Consul cluster. All |
|
// certificates signed by the cluster's CA must have their identifying URI in |
|
// this domain. |
|
// |
|
// This does not include the protocol (currently spiffe://) since we may |
|
// implement other protocols in future with equivalent semantics. It should be |
|
// compared against the "authority" section of a URI (i.e. host:port). |
|
// |
|
// We need to support migrating a cluster between trust domains to support |
|
// Multi-DC migration in Enterprise. In this case the current trust domain is |
|
// here but entries in Roots may also have ExternalTrustDomain set to a |
|
// non-empty value implying they were previous roots that are still trusted |
|
// but under a different trust domain. |
|
// |
|
// Note that we DON'T validate trust domain during AuthZ since it causes |
|
// issues of loss of connectivity during migration between trust domains. The |
|
// only time the additional validation adds value is where the cluster shares |
|
// an external root (e.g. organization-wide root) with another distinct Consul |
|
// cluster or PKI system. In this case, x509 Name Constraints can be added to |
|
// enforce that Consul's CA can only validly sign or trust certs within the |
|
// same trust-domain. Name constraints as enforced by TLS handshake also allow |
|
// seamless rotation between trust domains thanks to cross-signing. |
|
string TrustDomain = 2; |
|
|
|
// Roots is a list of root CA certs to trust. |
|
repeated CARoot Roots = 3; |
|
|
|
// QueryMeta here is mainly used to contain the latest Raft Index that could |
|
// be used to perform a blocking query. |
|
// mog: func-to=QueryMetaTo func-from=QueryMetaFrom |
|
common.QueryMeta QueryMeta = 4; |
|
} |
|
|
|
// CARoot is the trusted CA Root. |
|
// |
|
// mog annotation: |
|
// |
|
// target=github.com/hashicorp/consul/agent/structs.CARoot |
|
// output=connect.gen.go |
|
// name=StructsCARoot |
|
message CARoot { |
|
// ID is a globally unique ID (UUID) representing this CA root. |
|
string ID = 1; |
|
|
|
// Name is a human-friendly name for this CA root. This value is |
|
// opaque to Consul and is not used for anything internally. |
|
string Name = 2; |
|
|
|
// SerialNumber is the x509 serial number of the certificate. |
|
uint64 SerialNumber = 3; |
|
|
|
// SigningKeyID is the ID of the public key that corresponds to the private |
|
// key used to sign leaf certificates. Is is the HexString format of the |
|
// raw AuthorityKeyID bytes. |
|
string SigningKeyID = 4; |
|
|
|
// ExternalTrustDomain is the trust domain this root was generated under. It |
|
// is usually empty implying "the current cluster trust-domain". It is set |
|
// only in the case that a cluster changes trust domain and then all old roots |
|
// that are still trusted have the old trust domain set here. |
|
// |
|
// We currently DON'T validate these trust domains explicitly anywhere, see |
|
// IndexedRoots.TrustDomain doc. We retain this information for debugging and |
|
// future flexibility. |
|
string ExternalTrustDomain = 5; |
|
|
|
// Time validity bounds. |
|
// mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto |
|
google.protobuf.Timestamp NotBefore = 6; |
|
// mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto |
|
google.protobuf.Timestamp NotAfter = 7; |
|
|
|
// RootCert is the PEM-encoded public certificate. |
|
string RootCert = 8; |
|
|
|
// IntermediateCerts is a list of PEM-encoded intermediate certs to |
|
// attach to any leaf certs signed by this CA. |
|
repeated string IntermediateCerts = 9; |
|
|
|
// SigningCert is the PEM-encoded signing certificate and SigningKey |
|
// is the PEM-encoded private key for the signing certificate. These |
|
// may actually be empty if the CA plugin in use manages these for us. |
|
string SigningCert = 10; |
|
string SigningKey = 11; |
|
|
|
// Active is true if this is the current active CA. This must only |
|
// be true for exactly one CA. For any method that modifies roots in the |
|
// state store, tests should be written to verify that multiple roots |
|
// cannot be active. |
|
bool Active = 12; |
|
|
|
// RotatedOutAt is the time at which this CA was removed from the state. |
|
// This will only be set on roots that have been rotated out from being the |
|
// active root. |
|
// mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto |
|
google.protobuf.Timestamp RotatedOutAt = 13; |
|
|
|
// PrivateKeyType is the type of the private key used to sign certificates. It |
|
// may be "rsa" or "ec". This is provided as a convenience to avoid parsing |
|
// the public key to from the certificate to infer the type. |
|
string PrivateKeyType = 14; |
|
|
|
// PrivateKeyBits is the length of the private key used to sign certificates. |
|
// This is provided as a convenience to avoid parsing the public key from the |
|
// certificate to infer the type. |
|
// mog: func-to=int func-from=int32 |
|
int32 PrivateKeyBits = 15; |
|
|
|
// mog: func-to=RaftIndexTo func-from=RaftIndexFrom |
|
common.RaftIndex RaftIndex = 16; |
|
} |
|
|
|
// RaftIndex is used to track the index used while creating |
|
// or modifying a given struct type. |
|
// |
|
// mog annotation: |
|
// |
|
// target=github.com/hashicorp/consul/agent/structs.IssuedCert |
|
// output=connect.gen.go |
|
// name=StructsIssuedCert |
|
message IssuedCert { |
|
// SerialNumber is the unique serial number for this certificate. |
|
// This is encoded in standard hex separated by :. |
|
string SerialNumber = 1; |
|
|
|
// CertPEM and PrivateKeyPEM are the PEM-encoded certificate and private |
|
// key for that cert, respectively. This should not be stored in the |
|
// state store, but is present in the sign API response. |
|
string CertPEM = 2; |
|
string PrivateKeyPEM = 3; |
|
|
|
// Service is the name of the service for which the cert was issued. |
|
string Service = 4; |
|
// ServiceURI is the cert URI value. |
|
string ServiceURI = 5; |
|
|
|
// Agent is the name of the node for which the cert was issued. |
|
string Agent = 6; |
|
// AgentURI is the cert URI value. |
|
string AgentURI = 7; |
|
|
|
// Kind is the kind of service for which the cert was issued. |
|
// mog: func-to=structs.ServiceKind func-from=string |
|
string Kind = 12; |
|
// KindURI is the cert URI value. |
|
string KindURI = 13; |
|
|
|
// ServerURI is the URI value of a cert issued for a server agent. |
|
// The same URI is shared by all servers in a Consul datacenter. |
|
string ServerURI = 14; |
|
|
|
// WorkloadIdentity is the name of the workload identity for which the cert was issued. |
|
string WorkloadIdentity = 15; |
|
// WorkloadIdentityURI is the cert URI value. |
|
string WorkloadIdentityURI = 16; |
|
|
|
// ValidAfter and ValidBefore are the validity periods for the |
|
// certificate. |
|
// mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto |
|
google.protobuf.Timestamp ValidAfter = 8; |
|
// mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto |
|
google.protobuf.Timestamp ValidBefore = 9; |
|
|
|
// EnterpriseMeta is the Consul Enterprise specific metadata |
|
// mog: func-to=EnterpriseMetaTo func-from=EnterpriseMetaFrom |
|
common.EnterpriseMeta EnterpriseMeta = 10; |
|
|
|
// mog: func-to=RaftIndexTo func-from=RaftIndexFrom |
|
common.RaftIndex RaftIndex = 11; |
|
}
|
|
|