Skip to content

Commit 561d43e

Browse files
committed
TLS example fixes
- update certs - don't use testify in examples - update README
1 parent 3521aae commit 561d43e

File tree

3 files changed

+91
-40
lines changed

3 files changed

+91
-40
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ See [`_examples`](_examples) directory for complete standalone examples.
130130

131131
Testing a WebSocket server based on [`gorilla/websocket`](https://github.com/gorilla/websocket). Tests invoke the `http.Handler` or `fasthttp.RequestHandler` directly.
132132

133+
* [`tls_test.go`](_examples/tls_test.go)
134+
135+
Testing a TLS server made with `net/http` and `crypto/tls`
136+
133137
* [`oauth2_test.go`](_examples/oauth2_test.go)
134138

135139
Testing a OAuth2 server with [`oauth2`](https://github.com/go-oauth2/oauth2/).
@@ -142,10 +146,6 @@ See [`_examples`](_examples) directory for complete standalone examples.
142146

143147
Testing with custom formatter for assertion messages.
144148

145-
* [`tls_test.go`](_examples/tls_test.go)
146-
147-
Testing a tls server made with `net/http` and `crypto/tls`
148-
149149
## Quick start
150150

151151
##### Hello, world!

_examples/tls.go

Lines changed: 81 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
1999
func 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.
41109
func 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
}

_examples/tls_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package examples
22

33
import (
44
"crypto/tls"
5-
"github.com/gavv/httpexpect/v2"
6-
"github.com/stretchr/testify/assert"
75
"net/http"
86
"strconv"
97
"testing"
8+
9+
"github.com/gavv/httpexpect/v2"
1010
)
1111

1212
func TLSClient() *http.Client {
@@ -15,8 +15,7 @@ func TLSClient() *http.Client {
1515
}
1616

1717
func TestExampleTlsServer(t *testing.T) {
18-
19-
server := ExampleTLSServer() // ExampleTlsServer()
18+
server := ExampleTLSServer()
2019
server.StartTLS()
2120
defer server.Close()
2221

@@ -84,7 +83,8 @@ func TestExampleTlsServer(t *testing.T) {
8483
r.JSON().Decode(&m)
8584

8685
for item, amount := range m {
87-
assert.Equal(t, amount, items[item])
86+
if amount != items[item] {
87+
t.Fail()
88+
}
8889
}
89-
9090
}

0 commit comments

Comments
 (0)