~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/testing/cert.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2012, 2013 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package testing
 
5
 
 
6
import (
 
7
        "crypto/rsa"
 
8
        "crypto/tls"
 
9
        "crypto/x509"
 
10
        "fmt"
 
11
        "time"
 
12
 
 
13
        gitjujutesting "github.com/juju/testing"
 
14
 
 
15
        "github.com/juju/juju/cert"
 
16
)
 
17
 
 
18
func init() {
 
19
        if err := verifyCertificates(); err != nil {
 
20
                panic(err)
 
21
        }
 
22
}
 
23
 
 
24
// CACert and CAKey make up a CA key pair.
 
25
// CACertX509 and CAKeyRSA hold their parsed equivalents.
 
26
// ServerCert and ServerKey hold a CA-signed server cert/key.
 
27
// Certs holds the certificates and keys required to make a secure
 
28
// connection to a Mongo database.
 
29
var (
 
30
        CACert, CAKey = mustNewCA()
 
31
 
 
32
        CACertX509, CAKeyRSA = mustParseCertAndKey(CACert, CAKey)
 
33
 
 
34
        ServerCert, ServerKey = mustNewServer()
 
35
 
 
36
        Certs = serverCerts()
 
37
 
 
38
        // Other valid test certs different from the default.
 
39
        OtherCACert, OtherCAKey = mustNewCA()
 
40
)
 
41
 
 
42
func verifyCertificates() error {
 
43
        _, err := tls.X509KeyPair([]byte(CACert), []byte(CAKey))
 
44
        if err != nil {
 
45
                return fmt.Errorf("bad CA cert key pair: %v", err)
 
46
        }
 
47
        _, err = tls.X509KeyPair([]byte(ServerCert), []byte(ServerKey))
 
48
        if err != nil {
 
49
                return fmt.Errorf("bad server cert key pair: %v", err)
 
50
        }
 
51
        return cert.Verify(ServerCert, CACert, time.Now())
 
52
}
 
53
 
 
54
func mustNewCA() (string, string) {
 
55
        cert.KeyBits = 512
 
56
        caCert, caKey, err := cert.NewCA("juju testing", "1234-ABCD-IS-NOT-A-REAL-UUID", time.Now().AddDate(10, 0, 0))
 
57
        if err != nil {
 
58
                panic(err)
 
59
        }
 
60
        return string(caCert), string(caKey)
 
61
}
 
62
 
 
63
func mustNewServer() (string, string) {
 
64
        cert.KeyBits = 512
 
65
        var hostnames []string
 
66
        srvCert, srvKey, err := cert.NewServer(CACert, CAKey, time.Now().AddDate(10, 0, 0), hostnames)
 
67
        if err != nil {
 
68
                panic(err)
 
69
        }
 
70
        return string(srvCert), string(srvKey)
 
71
}
 
72
 
 
73
func mustParseCertAndKey(certPEM, keyPEM string) (*x509.Certificate, *rsa.PrivateKey) {
 
74
        cert, key, err := cert.ParseCertAndKey(certPEM, keyPEM)
 
75
        if err != nil {
 
76
                panic(err)
 
77
        }
 
78
        return cert, key
 
79
}
 
80
 
 
81
func serverCerts() *gitjujutesting.Certs {
 
82
        serverCert, serverKey := mustParseCertAndKey(ServerCert, ServerKey)
 
83
        return &gitjujutesting.Certs{
 
84
                CACert:     CACertX509,
 
85
                ServerCert: serverCert,
 
86
                ServerKey:  serverKey,
 
87
        }
 
88
}