Skip to content

Commit 8c59729

Browse files
committed
tls: refactor config construction
1 parent 4c13017 commit 8c59729

File tree

1 file changed

+23
-48
lines changed

1 file changed

+23
-48
lines changed

main.go

Lines changed: 23 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,8 @@ type CLIArgs struct {
313313
shutdownTimeout time.Duration
314314
}
315315

316-
func parse_args() CLIArgs {
317-
args := CLIArgs{
316+
func parse_args() *CLIArgs {
317+
args := &CLIArgs{
318318
minTLSVersion: TLSVersionArg(tls.VersionTLS12),
319319
maxTLSVersion: TLSVersionArg(tls.VersionTLS13),
320320
denyDstAddr: PrefixList{
@@ -684,9 +684,7 @@ func run() int {
684684
}
685685

686686
if args.cert != "" {
687-
cfg, err1 := makeServerTLSConfig(args.cert, args.key, args.cafile,
688-
args.ciphers, args.curves,
689-
uint16(args.minTLSVersion), uint16(args.maxTLSVersion), !args.disableHTTP2)
687+
cfg, err1 := makeServerTLSConfig(args)
690688
if err1 != nil {
691689
mainLogger.Critical("TLS config construction failed: %v", err1)
692690
return 3
@@ -740,17 +738,19 @@ func run() int {
740738
}
741739
if args.autocertHTTP != "" {
742740
go func() {
743-
log.Fatalf("HTTP-01 ACME challenge server stopped: %v",
741+
mainLogger.Critical("HTTP-01 ACME challenge server stopped: %v",
744742
http.ListenAndServe(args.autocertHTTP, m.HTTPHandler(nil)))
745743
}()
746744
}
747-
cfg := m.TLSConfig()
748-
cfg, err = updateServerTLSConfig(cfg, args.cafile, args.ciphers, args.curves,
749-
uint16(args.minTLSVersion), uint16(args.maxTLSVersion), !args.disableHTTP2)
745+
cfg, err := makeServerTLSConfig(args)
750746
if err != nil {
751747
mainLogger.Critical("TLS config construction failed: %v", err)
752748
return 3
753749
}
750+
cfg.GetCertificate = m.GetCertificate
751+
if len(cfg.NextProtos) > 0 {
752+
cfg.NextProtos = append(cfg.NextProtos, acme.ALPNProto)
753+
}
754754
listener = tls.NewListener(listener, cfg)
755755
}
756756
defer listener.Close()
@@ -861,66 +861,41 @@ func run() int {
861861
return 2
862862
}
863863

864-
func makeServerTLSConfig(certfile, keyfile, cafile, ciphers, curves string, minVer, maxVer uint16, h2 bool) (*tls.Config, error) {
864+
func makeServerTLSConfig(args *CLIArgs) (*tls.Config, error) {
865865
cfg := tls.Config{
866-
MinVersion: minVer,
867-
MaxVersion: maxVer,
868-
}
869-
cert, err := tls.LoadX509KeyPair(certfile, keyfile)
870-
if err != nil {
871-
return nil, err
866+
MinVersion: uint16(args.minTLSVersion),
867+
MaxVersion: uint16(args.maxTLSVersion),
872868
}
873-
cfg.Certificates = []tls.Certificate{cert}
874-
if cafile != "" {
875-
roots, err := tlsutil.LoadCAfile(cafile)
869+
if args.cert != "" {
870+
cert, err := tls.LoadX509KeyPair(args.cert, args.key)
876871
if err != nil {
877872
return nil, err
878873
}
879-
cfg.ClientCAs = roots
880-
cfg.ClientAuth = tls.VerifyClientCertIfGiven
881-
}
882-
cfg.CipherSuites, err = tlsutil.ParseCipherList(ciphers)
883-
if err != nil {
884-
return nil, err
874+
cfg.Certificates = []tls.Certificate{cert}
885875
}
886-
cfg.CurvePreferences, err = tlsutil.ParseCurveList(curves)
887-
if err != nil {
888-
return nil, err
889-
}
890-
if h2 {
891-
cfg.NextProtos = []string{"h2", "http/1.1"}
892-
} else {
893-
cfg.NextProtos = []string{"http/1.1"}
894-
}
895-
return &cfg, nil
896-
}
897-
898-
func updateServerTLSConfig(cfg *tls.Config, cafile, ciphers, curves string, minVer, maxVer uint16, h2 bool) (*tls.Config, error) {
899-
if cafile != "" {
900-
roots, err := tlsutil.LoadCAfile(cafile)
876+
if args.cafile != "" {
877+
roots, err := tlsutil.LoadCAfile(args.cafile)
901878
if err != nil {
902879
return nil, err
903880
}
904881
cfg.ClientCAs = roots
905882
cfg.ClientAuth = tls.VerifyClientCertIfGiven
906883
}
907884
var err error
908-
cfg.CipherSuites, err = tlsutil.ParseCipherList(ciphers)
885+
cfg.CipherSuites, err = tlsutil.ParseCipherList(args.ciphers)
909886
if err != nil {
910887
return nil, err
911888
}
912-
cfg.CurvePreferences, err = tlsutil.ParseCurveList(curves)
889+
cfg.CurvePreferences, err = tlsutil.ParseCurveList(args.curves)
913890
if err != nil {
914891
return nil, err
915892
}
916-
if h2 {
917-
cfg.NextProtos = []string{"h2", "http/1.1", "acme-tls/1"}
893+
if !args.disableHTTP2 {
894+
cfg.NextProtos = []string{"h2", "http/1.1"}
918895
} else {
919-
cfg.NextProtos = []string{"http/1.1", "acme-tls/1"}
896+
cfg.NextProtos = []string{"http/1.1"}
920897
}
921-
cfg.MinVersion = minVer
922-
cfg.MaxVersion = maxVer
923-
return cfg, nil
898+
return &cfg, nil
924899
}
925900

926901
func list_ciphers() {

0 commit comments

Comments
 (0)