aboutsummaryrefslogtreecommitdiff
path: root/solve_tls.go
diff options
context:
space:
mode:
Diffstat (limited to 'solve_tls.go')
-rw-r--r--solve_tls.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/solve_tls.go b/solve_tls.go
index 2017cd7..6062948 100644
--- a/solve_tls.go
+++ b/solve_tls.go
@@ -10,6 +10,7 @@ import (
"encoding/hex"
"log"
"math/big"
+ "net"
"net/http"
"time"
)
@@ -83,3 +84,27 @@ func (s *tlsSolver) Solve(_, keyAuth string) error {
func (s *tlsSolver) Solved() error {
return nil
}
+
+func ListenAndServeSNI(srv *http.Server, certs []tls.Certificate) error {
+ addr := srv.Addr
+ if addr == "" {
+ addr = ":https"
+ }
+ config := &tls.Config{}
+ if srv.TLSConfig != nil {
+ *config = *srv.TLSConfig
+ }
+ if config.NextProtos == nil {
+ config.NextProtos = []string{"http/1.1"}
+ }
+ if config.Certificates == nil {
+ config.Certificates = certs
+ }
+ config.BuildNameToCertificate()
+ conn, err := net.Listen("tcp", addr)
+ if err != nil {
+ return err
+ }
+ tlsListener := tls.NewListener(conn, config)
+ return srv.Serve(tlsListener)
+}