certloader

package
v1.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2018 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package certloader provides abstractions over certificates that can be used for clients and servers to make runtime reloading easier. It supports reading certificates from PEM files, PKCS#12 keystores, PKCS#11 hardware modules and from the macOS keychain.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func SupportsKeychain

func SupportsKeychain() bool

SupportsKeychain returns true or false, depending on whether the binary was built with Certstore/Keychain support or not (requires CGO, recent Darwin to build).

func SupportsPKCS11

func SupportsPKCS11() bool

SupportsPKCS11 returns true or false, depending on whether the binary was built with PKCS11 support or not (requires CGO to build).

Types

type Certificate

type Certificate interface {
	// Reload will reload the certificate and private key. Subsequent calls
	// to GetCertificate/GetClientCertificate will return the newly loaded
	// certificate, if reloading was successful. If reloading failed, the old
	// state is kept.
	Reload() error

	// GetCertificate returns the current underlying certificate.
	// Can be used for tls.Config's GetCertificate callback.
	GetCertificate(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error)

	// GetClientCertificate returns the current underlying certificate.
	// Can be used for tls.Config's GetClientCertificate callback.
	GetClientCertificate(certInfo *tls.CertificateRequestInfo) (*tls.Certificate, error)
}

Certificate wraps a TLS certificate and supports reloading at runtime.

Example
// Load a certificate from a set of PEM files.
cert, _ := CertificateFromPEMFiles("/path/to/cert.pem", "/path/to/privatekey.pem")

// Use the certificate in a tls.Config for servers
_ = tls.Config{
	// The GetCertificate function will be called to retrieve the latest
	// certificate when receiving new connections.
	GetCertificate: cert.GetCertificate,
}

// Use the certificate in a tls.Config for clients
_ = tls.Config{
	// The GetClientCertificate function will be called to retrieve the latest
	// client certificate when making new connections.
	GetClientCertificate: cert.GetClientCertificate,
}

// Reload a certificate. Will re-read the files from disk, and update the
// certificate if there have been any changes.
cert.Reload()
Output:

func CertificateFromKeychainIdentity

func CertificateFromKeychainIdentity(commonName string) (Certificate, error)

CertificateFromKeychainIdentity creates a reloadable certificate from a system keychain identity.

func CertificateFromKeystore

func CertificateFromKeystore(keystorePath, keystorePassword string) (Certificate, error)

CertificateFromKeystore creates a reloadable certificate from a PKCS#12 keystore.

func CertificateFromPEMFiles

func CertificateFromPEMFiles(certificatePath, keyPath string) (Certificate, error)

CertificateFromPEMFiles creates a reloadable certificate from a set of PEM files.

func CertificateFromPKCS11Module

func CertificateFromPKCS11Module(certificatePath, modulePath, tokenLabel, pin string) (Certificate, error)

CertificateFromPKCS11Module creates a reloadable certificate from a PKCS#11 module.

type Dialer

type Dialer interface {
	Dial(network, address string) (net.Conn, error)
}

Dialer is an interface for dialers. Can be a net.Dialer, http_dialer.HttpTunnel, or a dialer from this package.

func DialerWithCertificate

func DialerWithCertificate(cert Certificate, config *tls.Config, timeout time.Duration, dialer Dialer) Dialer

DialerWithCertificate creates a dialer that reloads its certificate (if set) before dialing new connections. If the certificate is nil, the dialer will still work, but it won't supply client certificates on connections.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL