Skip to content

Commit 85c4858

Browse files
authored
certutil: only add non-empty DNSNames to certificates (#361)
1 parent 31afddc commit 85c4858

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

testing/certutil/certutil.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,10 @@ func GenerateGenericChildCert(
186186
cn = fmt.Sprintf("[%s] %s", cfg.cnPrefix, cn)
187187
}
188188

189-
dnsNames := append(cfg.dnsNames, name)
189+
var dnsNames []string
190+
if name != "" {
191+
dnsNames = append(cfg.dnsNames, name)
192+
}
190193
notBefore, notAfter := makeNotBeforeAndAfter()
191194
certTemplate := &x509.Certificate{
192195
DNSNames: dnsNames,

testing/certutil/certutil_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
package certutil
1919

2020
import (
21+
"crypto/ecdsa"
22+
"crypto/elliptic"
23+
"crypto/rand"
2124
"crypto/x509"
2225
"encoding/pem"
26+
"net"
2327
"testing"
2428

2529
"github.com/stretchr/testify/assert"
@@ -84,3 +88,24 @@ func TestCertificates(t *testing.T) {
8488
})
8589
}
8690
}
91+
92+
func TestGenerateGenericChildCert_dns_cannot_be_empty(t *testing.T) {
93+
rootKey, rootCACert, _, err := NewRootCA()
94+
require.NoError(t, err, "could not create root CA certificate")
95+
96+
priv, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
97+
require.NoError(t, err, "failed to generate EC key")
98+
99+
tlsCert, _, err := GenerateGenericChildCert(
100+
"",
101+
[]net.IP{net.ParseIP("127.0.0.1")},
102+
priv,
103+
&priv.PublicKey,
104+
rootKey,
105+
rootCACert)
106+
require.NoError(t, err, "failed to generate child certificate")
107+
108+
for _, dns := range tlsCert.Leaf.DNSNames {
109+
assert.NotEmpty(t, dns, "DNSNames contains an empty name")
110+
}
111+
}

testing/proxytest/proxytest_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func TestProxy(t *testing.T) {
5151

5252
type setup struct {
5353
fakeBackendServer *httptest.Server
54-
generateTestHttpClient func(t *testing.T, proxy *Proxy) *http.Client
54+
generateTestHTTPClient func(t *testing.T, proxy *Proxy) *http.Client
5555
}
5656
type testRequest struct {
5757
method string
@@ -73,7 +73,7 @@ func TestProxy(t *testing.T) {
7373
name: "Basic scenario, no TLS",
7474
setup: setup{
7575
fakeBackendServer: createFakeBackendServer(),
76-
generateTestHttpClient: nil,
76+
generateTestHTTPClient: nil,
7777
},
7878
proxyOptions: nil,
7979
proxyStartTLS: false,
@@ -94,7 +94,7 @@ func TestProxy(t *testing.T) {
9494
name: "TLS scenario, server cert validation",
9595
setup: setup{
9696
fakeBackendServer: createFakeBackendServer(),
97-
generateTestHttpClient: func(t *testing.T, proxy *Proxy) *http.Client {
97+
generateTestHTTPClient: func(t *testing.T, proxy *Proxy) *http.Client {
9898
proxyURL, err := url.Parse(proxy.URL)
9999
require.NoErrorf(t, err, "failed to parse proxy URL %q", proxy.URL)
100100

@@ -135,7 +135,7 @@ func TestProxy(t *testing.T) {
135135
name: "mTLS scenario, client and server cert validation",
136136
setup: setup{
137137
fakeBackendServer: createFakeBackendServer(),
138-
generateTestHttpClient: func(t *testing.T, proxy *Proxy) *http.Client {
138+
generateTestHTTPClient: func(t *testing.T, proxy *Proxy) *http.Client {
139139
proxyURL, err := url.Parse(proxy.URL)
140140
require.NoErrorf(t, err, "failed to parse proxy URL %q", proxy.URL)
141141

@@ -224,8 +224,8 @@ func TestProxy(t *testing.T) {
224224
require.NoError(t, err, "error creating request")
225225

226226
var client *http.Client
227-
if tt.setup.generateTestHttpClient != nil {
228-
client = tt.setup.generateTestHttpClient(t, proxy)
227+
if tt.setup.generateTestHTTPClient != nil {
228+
client = tt.setup.generateTestHTTPClient(t, proxy)
229229
} else {
230230
// basic HTTP client using the proxy
231231
client = &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}}
@@ -244,7 +244,7 @@ func TestProxy(t *testing.T) {
244244
}
245245

246246
func TestHTTPSProxy(t *testing.T) {
247-
targetHost := "not-a-server.co"
247+
targetHost := "not-a-server.example"
248248
proxy, client, target := prepareMTLSProxyAndTargetServer(t, targetHost)
249249
t.Cleanup(func() {
250250
proxy.Close()
@@ -276,7 +276,7 @@ func TestHTTPSProxy(t *testing.T) {
276276
},
277277
{
278278
name: "request_failure",
279-
target: "https://any.not.target.will.do",
279+
target: "https://any.not.target.will.do.example",
280280
assertFn: func(t *testing.T, got *http.Response, err error) {
281281
assert.NoError(t, err, "request to an invalid host should not fail, but succeed with a HTTP error")
282282
assert.Equal(t, http.StatusBadGateway, got.StatusCode)

0 commit comments

Comments
 (0)