@@ -12,12 +12,18 @@ import (
12
12
"time"
13
13
)
14
14
15
+ var defaultTLSHost = "vproxy.local"
16
+
15
17
// LoggedHandler is an http.Server implementation which multiplexes requests to the
16
18
// vhost backends (via a handler) and logs each request.
17
19
type LoggedHandler struct {
18
20
* http.ServeMux
19
21
VhostLogListeners map [string ]chan string
20
22
vhostMux * VhostMux
23
+
24
+ defaultHost string
25
+ defaultCert string
26
+ defaultKey string
21
27
}
22
28
23
29
// NewLoggedHandler wraps the given handler with a request/response logger
@@ -27,10 +33,23 @@ func NewLoggedHandler(vm *VhostMux) *LoggedHandler {
27
33
VhostLogListeners : make (map [string ]chan string ),
28
34
vhostMux : vm ,
29
35
}
36
+
37
+ lh .defaultHost = defaultTLSHost
38
+ lh .createDefaultCert ()
39
+
40
+ // Map all requests, by default, to the appropriate vhost
30
41
lh .Handle ("/" , vm )
31
42
return lh
32
43
}
33
44
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
+
34
53
func (lh * LoggedHandler ) AddVhost (vhost * Vhost , listener chan string ) {
35
54
lh .VhostLogListeners [vhost .Host ] = listener
36
55
lh .vhostMux .Servers [vhost .Host ] = vhost
@@ -52,13 +71,24 @@ func (lh *LoggedHandler) DumpServers(w io.Writer) {
52
71
// Create multi-certificate TLS config from vhost config
53
72
func (lh * LoggedHandler ) CreateTLSConfig () * tls.Config {
54
73
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
55
83
for _ , server := range lh .vhostMux .Servers {
56
84
cert , err := tls .LoadX509KeyPair (server .Cert , server .Key )
57
85
if err != nil {
58
86
log .Fatal ("failed to load keypair:" , err )
59
87
}
60
88
cfg .Certificates = append (cfg .Certificates , cert )
61
89
}
90
+
91
+ // build cn and return
62
92
cfg .BuildNameToCertificate ()
63
93
return cfg
64
94
}
0 commit comments