mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2026-01-03 11:45:45 +00:00
149 lines
4.3 KiB
Go
149 lines
4.3 KiB
Go
// Copyright 2024 the Pinniped contributors. All Rights Reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package ptls
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"k8s.io/apimachinery/pkg/util/sets"
|
|
"k8s.io/apiserver/pkg/server/options"
|
|
)
|
|
|
|
func TestDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
aCertPool := x509.NewCertPool()
|
|
|
|
expected := &tls.Config{
|
|
MinVersion: tls.VersionTLS12,
|
|
CipherSuites: []uint16{
|
|
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_CHACHA20_POLY1305,
|
|
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
|
},
|
|
NextProtos: []string{"h2", "http/1.1"},
|
|
RootCAs: aCertPool,
|
|
}
|
|
|
|
require.Equal(t, expected, Default(aCertPool))
|
|
}
|
|
|
|
func TestDefaultLDAP(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
aCertPool := x509.NewCertPool()
|
|
|
|
expected := &tls.Config{
|
|
MinVersion: tls.VersionTLS12,
|
|
CipherSuites: []uint16{
|
|
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_CHACHA20_POLY1305,
|
|
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
|
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, //nolint:gosec // this is a test
|
|
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
|
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
|
|
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
|
},
|
|
NextProtos: []string{"h2", "http/1.1"},
|
|
RootCAs: aCertPool,
|
|
}
|
|
|
|
require.Equal(t, expected, DefaultLDAP(aCertPool))
|
|
}
|
|
|
|
func TestSecure(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
aCertPool := x509.NewCertPool()
|
|
|
|
expected := &tls.Config{
|
|
MinVersion: tls.VersionTLS13,
|
|
CipherSuites: nil, // TLS 1.3 ciphers are not configurable
|
|
NextProtos: []string{"h2", "http/1.1"},
|
|
RootCAs: aCertPool,
|
|
}
|
|
|
|
require.Equal(t, expected, Secure(aCertPool))
|
|
}
|
|
|
|
func TestSecureServing(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
opts := &options.SecureServingOptionsWithLoopback{SecureServingOptions: &options.SecureServingOptions{}}
|
|
|
|
expected := options.SecureServingOptionsWithLoopback{
|
|
SecureServingOptions: &options.SecureServingOptions{
|
|
MinTLSVersion: "VersionTLS13",
|
|
},
|
|
}
|
|
|
|
SecureServing(opts)
|
|
require.Equal(t, expected, *opts)
|
|
}
|
|
|
|
func TestCipherSuitesForDefault(t *testing.T) {
|
|
t.Run("contains exactly and only the expected values", func(t *testing.T) {
|
|
expected := []uint16{
|
|
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_CHACHA20_POLY1305_SHA256,
|
|
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
|
|
}
|
|
|
|
require.Equal(t, expected, Default(nil).CipherSuites)
|
|
})
|
|
|
|
t.Run("is a subset of TestCipherSuitesForDefaultLDAP", func(t *testing.T) {
|
|
defaultSuiteIDs := Default(nil).CipherSuites
|
|
ldapSuiteIDs := DefaultLDAP(nil).CipherSuites
|
|
|
|
require.Greater(t, len(defaultSuiteIDs), 0)
|
|
require.GreaterOrEqual(t, len(ldapSuiteIDs), len(defaultSuiteIDs))
|
|
|
|
require.Equal(t, 0, sets.New[uint16](defaultSuiteIDs...).Difference(sets.New[uint16](ldapSuiteIDs...)).Len())
|
|
})
|
|
}
|
|
|
|
func TestCipherSuitesForDefaultLDAP(t *testing.T) {
|
|
t.Run("contains exactly and only the expected values", func(t *testing.T) {
|
|
expected := []uint16{
|
|
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_CHACHA20_POLY1305_SHA256,
|
|
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
|
|
|
|
// Add these for LDAP
|
|
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
|
|
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
|
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
|
|
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
|
}
|
|
|
|
require.Equal(t, expected, DefaultLDAP(nil).CipherSuites)
|
|
})
|
|
|
|
t.Run("is a superset of TestCipherSuitesForDefault", func(t *testing.T) {
|
|
defaultSuiteIDs := Default(nil).CipherSuites
|
|
ldapSuiteIDs := DefaultLDAP(nil).CipherSuites
|
|
|
|
require.Greater(t, len(defaultSuiteIDs), 0)
|
|
require.GreaterOrEqual(t, len(ldapSuiteIDs), len(defaultSuiteIDs))
|
|
|
|
require.True(t, sets.New[uint16](ldapSuiteIDs...).IsSuperset(sets.New[uint16](defaultSuiteIDs...)))
|
|
})
|
|
}
|