mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-05 04:13:11 +02:00
derive CA from pre-shared key (#3815)
This commit is contained in:
parent
27c94396a8
commit
44a5c1b2fb
4 changed files with 267 additions and 0 deletions
51
pkg/derivecert/ca_test.go
Normal file
51
pkg/derivecert/ca_test.go
Normal file
|
@ -0,0 +1,51 @@
|
|||
package derivecert_test
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/x509"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/pomerium/pomerium/pkg/derivecert"
|
||||
)
|
||||
|
||||
// TestCA creates two CA instances from same PSK
|
||||
// and asserts that they yield same private key,
|
||||
// and a certificate created by one CA is trusted by another
|
||||
func TestCA(t *testing.T) {
|
||||
psk := make([]byte, 32)
|
||||
_, err := rand.Read(psk)
|
||||
require.NoError(t, err)
|
||||
|
||||
ca1, err := derivecert.NewCA(psk)
|
||||
require.NoError(t, err)
|
||||
ca2, err := derivecert.NewCA(psk)
|
||||
require.NoError(t, err)
|
||||
|
||||
ca1PEM, err := ca2.PEM()
|
||||
require.NoError(t, err)
|
||||
ca2PEM, err := ca2.PEM()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, ca1PEM.Key, ca2PEM.Key)
|
||||
|
||||
serverPEM, err := ca1.NewServerCert([]string{"myserver.com"})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, serverCert, err := serverPEM.KeyCert()
|
||||
require.NoError(t, err)
|
||||
|
||||
pool := x509.NewCertPool()
|
||||
require.True(t, pool.AppendCertsFromPEM(ca2PEM.Cert))
|
||||
|
||||
opts := x509.VerifyOptions{
|
||||
Roots: pool,
|
||||
DNSName: "myserver.com",
|
||||
Intermediates: x509.NewCertPool(),
|
||||
}
|
||||
|
||||
_, err = serverCert.Verify(opts)
|
||||
require.NoError(t, err)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue