tlsconfig

package
v0.0.8 Latest Latest
Warning

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

Go to latest
Published: Sep 10, 2019 License: BSD-3-Clause Imports: 17 Imported by: 0

Documentation

Overview

Package tlsconfig provides a safe set of TLS configurations for the Mozilla recommended ciphersuites.

See https://wiki.mozilla.org/Security/Server_Side_TLS

Prioritized by:

Key Ex:   ECDHE > DH > RSA
Enc:      CHACHA20 > AES-GCM > AES-CBC > 3DES
MAC:      AEAD > SHA256 > SHA384 > SHA1 (SHA)
AES:      128 > 256
Cert Sig: ECDSA > RSA

Modern: strongest ciphers (PFS-only) & latest TLS version(s) Default: mix of various strength ciphers & recent TLS versions Strict: deprecated, Default plus ECDHE+RSA+AES{128,256}+CBC+SHA1 for IE 11 Legacy: many ciphers & TLS versions for maximum compatibility, less secure

Index

Constants

View Source
const (
	InstanceIdentityDocID int = iota
	InstanceIdentitySigID
)

Variables

View Source
var (
	// DefaultCiphers provides strong security for a wide range of clients.
	DefaultCiphers = []uint16{
		tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_RSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
		tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
	}

	// LegacyCiphers supports a maximum number of old devices.
	//
	// See https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility
	LegacyCiphers = []uint16{
		tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
		tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
		tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_RSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_RSA_WITH_AES_128_CBC_SHA,
		tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_RSA_WITH_AES_256_CBC_SHA,
		tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
	}

	// ModernCiphers provides the highest level of security for modern devices.
	ModernCiphers = []uint16{
		tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
	}

	// StrictCiphers balences high level of security with backwards compatibility.
	StrictCiphers = []uint16{
		tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
		tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
		tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
		tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
		tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
	}
)
View Source
var (
	InstanceIdentityDocOID asn1.ObjectIdentifier = append(oidPrefix, InstanceIdentityDocID)
	InstanceIdentitySigOID asn1.ObjectIdentifier = append(oidPrefix, InstanceIdentitySigID)
)
View Source
var ErrCannotAppendFromPEM = errors.New("cannot append from PEM")

Functions

func Default added in v0.0.5

func Default(config *tls.Config)

Default modifies config with safe defaults for standard compatibility.

func Legacy added in v0.0.5

func Legacy(config *tls.Config)

Legacy modifies config with safe defaults for backwards compatibility.

func Modern added in v0.0.5

func Modern(config *tls.Config)

Modern modifies config with safe defaults for modern browser compatibility.

func New

func New() *tls.Config

New returns a TLS configuration tuned for performance and security based on the recommendations in: https://blog.gopheracademy.com/advent-2016/exposing-go-on-the-internet/

AES128 & SHA256 preferred over AES256 & SHA384: https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#31-avoid-too-much-security

func NewMutualTLS

func NewMutualTLS(caCerts [][]byte, serverCert tls.Certificate) (*tls.Config, error)

NewMutualTLS returns a TLS configuration setup for mutual TLS authentication.

func PoolFromPEM added in v0.0.5

func PoolFromPEM(cert []byte) (*x509.CertPool, error)

PoolFromPEM accepts a RootCA PEM in the form of a byte slice and returns a cert pool.

func Strict added in v0.0.5

func Strict(config *tls.Config)

Strict modifies config with safe defaults for compliance compatibility.

Types

type CA added in v0.0.5

type CA tls.Certificate

CA is a certificate & key that generate new signed leaf TLS Certificates.

func LoadCA added in v0.0.5

func LoadCA(certPEM, keyPEM []byte, chainPEMs ...[]byte) (*CA, error)

LoadCA initializes a TLS certificate and key, along with an optional certificate chain from raw PEM encoded values.

func (*CA) NewLeaf added in v0.0.5

func (c *CA) NewLeaf(config LeafConfig) (*tls.Certificate, error)

NewLeaf generates a new leaf certificate & key signed by c.

type LeafConfig added in v0.0.5

type LeafConfig struct {
	// Hostname is used for the subject CN and DNSNames fields. Ignored if CSR is present.
	Hostname string
	// CSR is the x509 certificate request.
	CSR *x509.CertificateRequest
	// IID is the EC2 Instance Identity Document data and signature.
	IID *identitydoc.InstanceIdentityDocument
	// PublicKeyAlgorithm is the type of public key generated for the certificate.
	PublicKeyAlgorithm x509.PublicKeyAlgorithm
}

Jump to

Keyboard shortcuts

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