add sni handler

This commit is contained in:
ginuerzh
2021-11-25 23:08:03 +08:00
parent 6daf0a4d0f
commit 5b97b878fb
12 changed files with 351 additions and 56 deletions
+29 -2
View File
@@ -1,6 +1,7 @@
package main
import (
"crypto/tls"
"flag"
"fmt"
"net/http"
@@ -8,6 +9,7 @@ import (
"os"
"runtime"
tls_util "github.com/go-gost/gost/pkg/common/util/tls"
"github.com/go-gost/gost/pkg/config"
"github.com/go-gost/gost/pkg/logger"
)
@@ -64,6 +66,8 @@ func main() {
normConfig(cfg)
log = logFromConfig(cfg.Log)
if outputCfgFile != "" {
if err := cfg.WriteFile(outputCfgFile); err != nil {
log.Fatal(err)
@@ -71,8 +75,6 @@ func main() {
os.Exit(0)
}
log = logFromConfig(cfg.Log)
if cfg.Profiling != nil && cfg.Profiling.Enabled {
go func() {
addr := cfg.Profiling.Addr
@@ -83,6 +85,31 @@ func main() {
log.Fatal(http.ListenAndServe(addr, nil))
}()
}
tlsCfg := cfg.TLS
if tlsCfg == nil {
tlsCfg = &config.TLSConfig{
Cert: "cert.pem",
Key: "key.pem",
CA: "ca.crt",
}
}
tlsConfig, err := tls_util.LoadTLSConfig(tlsCfg.Cert, tlsCfg.Key, tlsCfg.CA)
if err != nil {
// generate random self-signed certificate.
cert, err := tls_util.GenCertificate()
if err != nil {
log.Fatal(err)
}
tlsConfig = &tls.Config{
Certificates: []tls.Certificate{cert},
}
log.Warn("load TLS certificate files failed, use random generated certificate")
} else {
log.Debug("load TLS certificate files OK")
}
tls_util.DefaultConfig = tlsConfig
services := buildService(cfg)
for _, svc := range services {
go svc.Run()