Skip to content

Commit bf5dfd8

Browse files
committed
fix: add default TLS cert
We need at least a single TLS cert or else the TLS listener will not properly respond to TLS requests causing the client to timeout.
1 parent f1dc487 commit bf5dfd8

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
*.o
33
*.a
44
*.so
5+
bin/vproxy/__debug_bin
56

67
# Folders
78
_obj

logged_handler.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@ import (
1212
"time"
1313
)
1414

15+
var defaultTLSHost = "vproxy.local"
16+
1517
// LoggedHandler is an http.Server implementation which multiplexes requests to the
1618
// vhost backends (via a handler) and logs each request.
1719
type LoggedHandler struct {
1820
*http.ServeMux
1921
VhostLogListeners map[string]chan string
2022
vhostMux *VhostMux
23+
24+
defaultHost string
25+
defaultCert string
26+
defaultKey string
2127
}
2228

2329
// NewLoggedHandler wraps the given handler with a request/response logger
@@ -27,10 +33,23 @@ func NewLoggedHandler(vm *VhostMux) *LoggedHandler {
2733
VhostLogListeners: make(map[string]chan string),
2834
vhostMux: vm,
2935
}
36+
37+
lh.defaultHost = defaultTLSHost
38+
lh.createDefaultCert()
39+
40+
// Map all requests, by default, to the appropriate vhost
3041
lh.Handle("/", vm)
3142
return lh
3243
}
3344

45+
func (lh *LoggedHandler) createDefaultCert() {
46+
var err error
47+
lh.defaultCert, lh.defaultKey, err = MakeCert(lh.defaultHost)
48+
if err != nil {
49+
log.Fatalf("failed to create default cert for vproxy.local: %s", err)
50+
}
51+
}
52+
3453
func (lh *LoggedHandler) AddVhost(vhost *Vhost, listener chan string) {
3554
lh.VhostLogListeners[vhost.Host] = listener
3655
lh.vhostMux.Servers[vhost.Host] = vhost
@@ -52,13 +71,24 @@ func (lh *LoggedHandler) DumpServers(w io.Writer) {
5271
// Create multi-certificate TLS config from vhost config
5372
func (lh *LoggedHandler) CreateTLSConfig() *tls.Config {
5473
cfg := &tls.Config{}
74+
75+
// Add default internal cert
76+
cert, err := tls.LoadX509KeyPair(lh.defaultCert, lh.defaultKey)
77+
if err != nil {
78+
log.Fatal("failed to load keypair:", err)
79+
}
80+
cfg.Certificates = append(cfg.Certificates, cert)
81+
82+
// add cert for each vhost
5583
for _, server := range lh.vhostMux.Servers {
5684
cert, err := tls.LoadX509KeyPair(server.Cert, server.Key)
5785
if err != nil {
5886
log.Fatal("failed to load keypair:", err)
5987
}
6088
cfg.Certificates = append(cfg.Certificates, cert)
6189
}
90+
91+
// build cn and return
6292
cfg.BuildNameToCertificate()
6393
return cfg
6494
}

0 commit comments

Comments
 (0)