Documentation
¶
Index ¶
- Constants
- func AssembleServerChains(certs []*x509.Certificate) ([][]*x509.Certificate, error)
- func ChainsToTlsCerts(chains [][]*x509.Certificate, key crypto.PrivateKey) []*tls.Certificate
- func IsFile(configValue string) (string, bool)
- func LoadKey(keyAddr string) (crypto.PrivateKey, error)
- type Config
- func (config *Config) Validate() error
- func (config *Config) ValidateForClient() error
- func (config *Config) ValidateForClientWithPathContext(pathContext string) error
- func (config *Config) ValidateForServer() error
- func (config *Config) ValidateForServerWithPathContext(pathContext string) error
- func (config *Config) ValidateWithPathContext(pathContext string) error
- type ID
- func (id *ID) CA() *x509.CertPool
- func (id *ID) Cert() *tls.Certificate
- func (id *ID) ClientTLSConfig() *tls.Config
- func (id *ID) GetClientCertificate(config *tls.Config, _ *tls.CertificateRequestInfo) (*tls.Certificate, error)
- func (id *ID) GetConfig() *Config
- func (id *ID) GetConfigForClient(config *tls.Config, _ *tls.ClientHelloInfo) (*tls.Config, error)
- func (id *ID) GetServerCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, error)
- func (id *ID) Reload() error
- func (id *ID) ServerCert() []*tls.Certificate
- func (id *ID) ServerTLSConfig() *tls.Config
- func (id *ID) SetCert(pem string) error
- func (id *ID) SetServerCert(pem string) error
- func (id *ID) StopWatchingFiles()
- func (id *ID) WatchFiles() error
- type Identity
- type ServerPair
- type TokenId
- func LoadClientIdentity(certPath, keyPath, caCertPath string) (*TokenId, error)
- func LoadServerIdentity(clientCertPath, serverCertPath, keyPath, caCertPath string) (*TokenId, error)
- func NewClientTokenIdentity(clientCert *x509.Certificate, privateKey crypto.PrivateKey, ...) *TokenId
- func NewIdentity(id Identity) *TokenId
Constants ¶
const ( ConfigFieldCert = "cert" ConfigFieldKey = "key" ConfigFieldServerCert = "server_cert" ConfigFieldServerKey = "server_key" ConfigFieldAltServerCerts = "alt_server_certs" ConfigFieldCa = "ca" )
const ( StorageFile = "file" StoragePem = "pem" )
Variables ¶
This section is empty.
Functions ¶
func AssembleServerChains ¶ added in v1.0.3
func AssembleServerChains(certs []*x509.Certificate) ([][]*x509.Certificate, error)
AssembleServerChains takes in an array of certificates, finds all certificates with x509.ExtKeyUsageAny or x509.ExtKeyUsageServerAuth and builds an array of leaf-first chains.
func ChainsToTlsCerts ¶ added in v1.0.3
func ChainsToTlsCerts(chains [][]*x509.Certificate, key crypto.PrivateKey) []*tls.Certificate
ChainsToTlsCerts converts and array of x509 certificate chains to an array of tls.Certificates (which have their own internal arrays of raw certificates). It is assumed the same private key is used for all chains.
Types ¶
type Config ¶
type Config struct {
Key string `json:"key" yaml:"key" mapstructure:"key"`
Cert string `json:"cert" yaml:"cert" mapstructure:"cert"`
ServerCert string `json:"server_cert,omitempty" yaml:"server_cert,omitempty" mapstructure:"server_cert,omitempty"`
ServerKey string `json:"server_key,omitempty" yaml:"server_key,omitempty" mapstructure:"server_key,omitempty"`
AltServerCerts []ServerPair `json:"alt_server_certs,omitempty" yaml:"alt_server_certs,omitempty" mapstructure:"alt_server_certs,omitempty"`
CA string `json:"ca,omitempty" yaml:"ca,omitempty" mapstructure:"ca"`
}
func NewConfigFromMap ¶
NewConfigFromMap will parse a standard identity configuration section that has been loaded from JSON/YAML/etc. parse functions that return interface{} maps. It expects the following fields to be defined as strings if present. If any fields are missing they are left as empty string in the resulting Config.
func NewConfigFromMapWithPathContext ¶
func NewConfigFromMapWithPathContext(identityMap map[interface{}]interface{}, pathContext string) (*Config, error)
NewConfigFromMapWithPathContext performs the same checks as NewConfigFromMap but also allows a path context to be provided for error messages when parsing deep or complex configuration.
Example:
`NewConfigFromMapWithPathContext(myMap, "my.path")` errors would be formatted as "value [my.path.cert] must be a string"`
func (*Config) Validate ¶
Validate validates the current IdentityConfiguration to have non-empty values all fields except ServerKey which assumes that Key is a suitable default.
func (*Config) ValidateForClient ¶
ValidateForClient validates the current IdentityConfiguration has enough values to initiate a client connection. For example: a tls.Config for a client in mTLS
func (*Config) ValidateForClientWithPathContext ¶
ValidateForClientWithPathContext performs the same checks as ValidateForClient but also allows a path context to be provided for error messages when parsing deep or complex configuration.
Example:
`ValidateForClientWithPathContext("my.path")` errors would be formatted as "required configuration value [my.path.cert]..."`
func (*Config) ValidateForServer ¶
ValidateForServer validates the current IdentityConfiguration has enough values to a client connection. For example: a tls.Config for a server in mTLS
func (*Config) ValidateForServerWithPathContext ¶
ValidateForServerWithPathContext performs the same checks as ValidateForServer but also allows a path context to be provided for error messages when parsing deep or complex configuration.
Example:
`ValidateWithPathContext("my.path")` errors would be formatted as "required configuration value [my.path.cert]..."`
func (*Config) ValidateWithPathContext ¶
ValidateWithPathContext performs the same checks as Validate but also allows a path context to be provided for error messages when parsing deep or complex configuration.
Example:
`ValidateWithPathContext("my.path")` errors would be formatted as "required configuration value [my.path.cert]..."`
type ID ¶
type ID struct {
Config
// contains filtered or unexported fields
}
func (*ID) CA ¶
CA returns the ID's current CA certificate pool that is used by all tls.Config's generated from it.
func (*ID) Cert ¶
func (id *ID) Cert() *tls.Certificate
Cert returns the ID's current client certificate that is used by all tls.Config's generated from it.
func (*ID) ClientTLSConfig ¶
ClientTLSConfig returns a new tls.Config instance that will delegate client certificate lookup to the current ID. Calling Reload on the source ID can update which client certificate is used if the internal Config is altered by calling Config or if the values the Config points to are altered (i.e. file update).
Generating multiple tls.Config's by calling this method will return tls.Config's that are all tied to this ID's Config and client certificates.
func (*ID) GetClientCertificate ¶
func (id *ID) GetClientCertificate(config *tls.Config, _ *tls.CertificateRequestInfo) (*tls.Certificate, error)
GetClientCertificate is used to satisfy tls.Config's GetClientCertificate requirements. Allows client certificates to be updated after enrollment extensions without disconnecting the current client. New settings will be used on re-connect.
func (*ID) GetConfig ¶
GetConfig returns the internally stored copy of the Config that was used to create the ID. The returned Config can be used to create additional IDs but those IDs will not share the same Config.
func (*ID) GetConfigForClient ¶
GetConfigForClient is used to satisfy tls.Config's GetConfigForClient requirements. Allows servers to have up-to-date CA chains after enrollment extension.
func (*ID) GetServerCertificate ¶
func (id *ID) GetServerCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, error)
GetServerCertificate is used to satisfy tls.Config's GetCertificate requirements. Allows server certificates to be updated after enrollment extensions without stopping listeners and disconnecting clients. New settings are used for all new incoming connection.
func (*ID) Reload ¶
Reload re-interprets the internal Config that was used to create this ID. This instance of the ID is updated with new client, server, and ca configuration. All tls.Config's generated from this ID will use the newly loaded values for new connections.
func (*ID) ServerCert ¶
func (id *ID) ServerCert() []*tls.Certificate
ServerCert returns the ID's current server certificate that is used by all tls.Config's generated from it.
func (*ID) ServerTLSConfig ¶
ServerTLSConfig returns a new tls.Config instance that will delegate server certificate lookup to the current ID. Calling Reload on the source ID will update which server certificate is used if the internal Config is altered by calling Config or if the values the Config points to are altered (i.e. file update).
Generating multiple tls.Config's by calling this method will return tls.Config's that are all tied to this ID's Config.
func (*ID) SetServerCert ¶
SetServerCert persists a new PEM as the ID's server certificate.
func (*ID) StopWatchingFiles ¶ added in v1.0.12
func (id *ID) StopWatchingFiles()
StopWatchingFiles decrements the number of watchers. If zero is hit all watching is stopped. If too many stops are called a panic will occur.
func (*ID) WatchFiles ¶ added in v1.0.12
WatchFiles will increment the number of watchers. The first watcher will start a file system watcher. WatchFiles should match with a StopWatchingFiles.
type Identity ¶
type Identity interface {
Cert() *tls.Certificate
ServerCert() []*tls.Certificate
CA() *x509.CertPool
ServerTLSConfig() *tls.Config
ClientTLSConfig() *tls.Config
Reload() error
WatchFiles() error
StopWatchingFiles()
SetCert(pem string) error
SetServerCert(pem string) error
GetConfig() *Config
}
func LoadIdentity ¶
type ServerPair ¶ added in v1.0.5
type TokenId ¶
func LoadClientIdentity ¶
func LoadServerIdentity ¶
func NewClientTokenIdentity ¶
func NewClientTokenIdentity(clientCert *x509.Certificate, privateKey crypto.PrivateKey, caCerts []*x509.Certificate) *TokenId