aboutsummaryrefslogtreecommitdiff
path: root/solve_tls.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-07 14:58:00 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-07 14:58:00 +0100
commitb5eb551c192b2c5df650584b674ced716b28a961 (patch)
tree549e6877899b0af78a7a32466e7dd88760636870 /solve_tls.go
parent98b7cd41de84742c6c4b895d42a1203f02a442a4 (diff)
Move start listener into solver (once)
Diffstat (limited to 'solve_tls.go')
-rw-r--r--solve_tls.go11
1 files changed, 4 insertions, 7 deletions
diff --git a/solve_tls.go b/solve_tls.go
index c5e5fed..babc5e4 100644
--- a/solve_tls.go
+++ b/solve_tls.go
@@ -9,6 +9,7 @@ import (
"log"
"math/big"
"net/http"
+ "sync"
"time"
)
@@ -17,6 +18,7 @@ var errNoCert = errors.New("no cert")
type tlsSolver struct {
http.Server
sni map[string]*tls.Certificate
+ sync.Once
}
func (s *tlsSolver) getCert(h *tls.ClientHelloInfo) (*tls.Certificate, error) {
@@ -36,16 +38,10 @@ func NewTLSSolver(addr string) (Solver, error) {
Server: http.Server{Addr: addr},
sni: make(map[string]*tls.Certificate),
}
- config := &tls.Config{
+ s.Server.TLSConfig = &tls.Config{
Certificates: []tls.Certificate{dummy},
GetCertificate: s.getCert,
}
- s.Server.TLSConfig = config
- go func() {
- if err := s.ListenAndServeTLS("", ""); err != nil {
- log.Fatal(err)
- }
- }()
return s, nil
}
@@ -83,6 +79,7 @@ func newCert(domain string) (tls.Certificate, error) {
}
func (s *tlsSolver) Solve(ch Challenge) error {
+ s.Do(func() { go s.ListenAndServeTLS("", "") })
name := ch.SNIName()
log.Println("solve tls", name)
crt, err := newCert(name)