@@ -11,24 +11,92 @@ import (
1111 "strconv"
1212)
1313
14+ /*
15+ openssl ecparam -genkey -name secp384r1 -noout -out root.key
16+
17+ openssl req -x509 -new -nodes -key root.key -sha256 -days 99999 -out root.pem \
18+ -subj "/C=US/ST=Default/L=Default/O=Default/OU=Root CA/CN=Root CA"
19+
20+ cat root.pem
21+ */
22+ const rootPEM = `-----BEGIN CERTIFICATE-----
23+ MIICYjCCAeigAwIBAgIUI0z85tUs0+AkSxegGbR8FIhDlLwwCgYIKoZIzj0EAwIw
24+ ZzELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0RlZmF1bHQxEDAOBgNVBAcMB0RlZmF1
25+ bHQxEDAOBgNVBAoMB0RlZmF1bHQxEDAOBgNVBAsMB1Jvb3QgQ0ExEDAOBgNVBAMM
26+ B1Jvb3QgQ0EwIBcNMjUwMzAyMTYyNzU4WhgPMjI5ODEyMTUxNjI3NThaMGcxCzAJ
27+ BgNVBAYTAlVTMRAwDgYDVQQIDAdEZWZhdWx0MRAwDgYDVQQHDAdEZWZhdWx0MRAw
28+ DgYDVQQKDAdEZWZhdWx0MRAwDgYDVQQLDAdSb290IENBMRAwDgYDVQQDDAdSb290
29+ IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAErFzNSZjpYSDSltw59xWyJ4qWmhof
30+ e0idFvpU5IR/ESQCH2XLCB7pCPipcaMle6uXkBgLmDnlfx9uEjDyPCoH8/kzO9jU
31+ LxmP5qs6COOvp/te3NNtJ5d61YVsFvJtOV63o1MwUTAdBgNVHQ4EFgQU8QzxNU1Y
32+ Un8xwId7x+kw4+XSpMswHwYDVR0jBBgwFoAU8QzxNU1YUn8xwId7x+kw4+XSpMsw
33+ DwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNoADBlAjEA8G1boeaHX38AHHTo
34+ 1HY40uz7xMw4iO6fyQ4oVgcpAc/gTFy+dLK1ZTcf6cSeabi8AjBxIpXixwrljDz+
35+ PpT7MUaOkjIOB/oL4saF83iwjFOp3iHQ0JKrK8/agyHcQVac4vU=
36+ -----END CERTIFICATE-----`
37+
38+ /*
39+ openssl ecparam -genkey -name secp384r1 -noout -out server.key
40+ cat server.key
41+ */
42+ const keyPEM = `-----BEGIN EC PRIVATE KEY-----
43+ MIGkAgEBBDDTT/qNszAfIQFRv9y34x1RgM3hFVAp5U3a/btjYqEgqxYk8kvUGlFr
44+ +qEprddwNqCgBwYFK4EEACKhZANiAARiOW9fjG7w3oscwVgIV09b4j8OeHZU0Zm7
45+ tZETBGwIzFBiYfYkJZsdqd7xItm2NI9pIwUN1IOUaMWj04pt4QPimRF9595dsQRR
46+ QBi1vJGmGpbzVQMrdPX76841f7ijjMk=
47+ -----END EC PRIVATE KEY-----`
48+
49+ /*
50+ cat >san.cnf <<-EOF
51+ [req]
52+ req_extensions = req_ext
53+ distinguished_name = dn
54+
55+ [dn]
56+ C = US
57+ ST = Default
58+ L = Default
59+ O = Default
60+ OU = Server
61+ CN = localhost
62+
63+ [req_ext]
64+ subjectAltName = @alt_names
65+
66+ [alt_names]
67+ IP.1 = 127.0.0.1
68+ EOF
69+
70+ openssl req -new -key server.key -out server.csr -config san.cnf \
71+ -subj "/C=US/ST=Default/L=Default/O=Default/OU=Root CA/CN=Root CA"
72+
73+ openssl x509 -req -in server.csr -CA root.pem -CAkey root.key -CAcreateserial \
74+ -out server.crt -days 99999 -sha256 -extensions req_ext -extfile san.cnf
75+
76+ cat server.crt
77+ */
78+ const certPEP = `-----BEGIN CERTIFICATE-----
79+ MIICYzCCAeigAwIBAgIUWwtxD72tzDuOZhszd51AVmuZpswwCgYIKoZIzj0EAwIw
80+ ZzELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0RlZmF1bHQxEDAOBgNVBAcMB0RlZmF1
81+ bHQxEDAOBgNVBAoMB0RlZmF1bHQxEDAOBgNVBAsMB1Jvb3QgQ0ExEDAOBgNVBAMM
82+ B1Jvb3QgQ0EwIBcNMjUwMzAyMTY0NTQzWhgPMjI5ODEyMTUxNjQ1NDNaMGcxCzAJ
83+ BgNVBAYTAlVTMRAwDgYDVQQIDAdEZWZhdWx0MRAwDgYDVQQHDAdEZWZhdWx0MRAw
84+ DgYDVQQKDAdEZWZhdWx0MRAwDgYDVQQLDAdSb290IENBMRAwDgYDVQQDDAdSb290
85+ IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYjlvX4xu8N6LHMFYCFdPW+I/Dnh2
86+ VNGZu7WREwRsCMxQYmH2JCWbHane8SLZtjSPaSMFDdSDlGjFo9OKbeED4pkRfefe
87+ XbEEUUAYtbyRphqW81UDK3T1++vONX+4o4zJo1MwUTAPBgNVHREECDAGhwR/AAAB
88+ MB0GA1UdDgQWBBRmxPMxdBiiNpML14s8SWKQCOuLZjAfBgNVHSMEGDAWgBTxDPE1
89+ TVhSfzHAh3vH6TDj5dKkyzAKBggqhkjOPQQDAgNpADBmAjEAy0Bq3IU8jXkfz6be
90+ QwmYr+tqdBUnWpSwvIgySTU7nF1qT8CUF1Nq/xKbl1FQfFy9AjEA4ni6pxNc4v7a
91+ yaCpOxVFyMz6wFOdTdWBBR4MFNi/HsAcSGMvSIPM+PMYdFc0FmN3
92+ -----END CERTIFICATE-----`
93+
1494// NewRootCertPool creates a new custom root-certificate set.
1595//
1696// In this example, it's used so that the server's certificates are trusted.
1797// In real world use it's better to omit this in order to use the
1898// default root set of the current operating system.
1999func NewRootCertPool () * x509.CertPool {
20- const rootPEM = `
21- -----BEGIN CERTIFICATE-----
22- MIIBUzCB+6ADAgECAgEBMAoGCCqGSM49BAMCMBIxEDAOBgNVBAoTB1Rlc3QgQ0Ew
23- HhcNMjMxMTEzMTIyNTEzWhcNMjQwNTExMTIyNTEzWjASMRAwDgYDVQQKEwdUZXN0
24- IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHBm1CiEs4CKw0ynUlzaTz9Pi
25- ROnBwosfX3xYIEz5l1rN119FEJLWQFx8xBASkpZDz+Eehw9QdPaqwapDKGVgbaNC
26- MEAwDgYDVR0PAQH/BAQDAgIEMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFExX
27- luCP8Bp73F1L7UuFCM/NFgPkMAoGCCqGSM49BAMCA0cAMEQCIFLFQRgIUbjzA0c1
28- Pennq6gP/WiJpppZPQq5IYR4V7BfAiBVoGh+32UOJ13YYO8HsL/6P7KIwZKXkJpJ
29- LoibTriVMg==
30- -----END CERTIFICATE-----
31- `
32100 roots := x509 .NewCertPool ()
33101 ok := roots .AppendCertsFromPEM ([]byte (rootPEM ))
34102 if ! ok {
@@ -39,24 +107,7 @@ LoibTriVMg==
39107
40108// ExampleTLSServer creates a httptest.Server with hardcoded key pair.
41109func ExampleTLSServer () * httptest.Server {
42- certPem := []byte (`-----BEGIN CERTIFICATE-----
43- MIIBbDCCARKgAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQKEwdUZXN0IENB
44- MB4XDTIzMTExMzEyMjUxN1oXDTI0MDUxMTEyMjUxN1owEjEQMA4GA1UEChMHQWNt
45- ZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEvlkPnSh5jYMD4MSkjJH7HW
46- iDR/UnqIJrI3nV0FTotWly0z3nMy0FCM1VxyGJc8HcKi2KPIaQmVF2sYCLwu8xuj
47- WTBXMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSME
48- GDAWgBRMV5bgj/Aae9xdS+1LhQjPzRYD5DAPBgNVHREECDAGhwR/AAABMAoGCCqG
49- SM49BAMCA0gAMEUCIQDHQVvWrOvagkYT9/qeSZ7xUwTTWiRfvWmlCgLf5NXu7AIg
50- ea/Q6OcG41k25PXVn3VRLRBEfSFIsuJzTyTNXCHx8vY=
51- -----END CERTIFICATE-----` )
52-
53- keyPem := []byte (`-----BEGIN EC PRIVATE KEY-----
54- MHcCAQEEIHHIE/n9wJI/dm1vnwhd8Jm/Wi04R+m8wYfUnkCFu4QnoAoGCCqGSM49
55- AwEHoUQDQgAES+WQ+dKHmNgwPgxKSMkfsdaINH9SeogmsjedXQVOi1aXLTPeczLQ
56- UIzVXHIYlzwdwqLYo8hpCZUXaxgIvC7zGw==
57- -----END EC PRIVATE KEY-----` )
58-
59- cert , err := tls .X509KeyPair (certPem , keyPem )
110+ cert , err := tls .X509KeyPair ([]byte (certPEP ), []byte (keyPEM ))
60111 if err != nil {
61112 log .Fatal (err )
62113 }
0 commit comments