Skip to content

Commit f96f206

Browse files
committed
Changed setting to ACME_ACCEPTTOS and improved CA root reading
Signed-off-by: Cristian Le <[email protected]>
1 parent 572c88a commit f96f206

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

cmd/web_acme.go

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package cmd
77
import (
88
"crypto/x509"
99
"encoding/pem"
10+
"fmt"
1011
"net/http"
1112
"os"
1213
"strconv"
@@ -19,6 +20,24 @@ import (
1920
"github.com/caddyserver/certmagic"
2021
)
2122

23+
func getCARoot(path string) (*x509.CertPool, error) {
24+
r, err := os.ReadFile(path)
25+
if err != nil {
26+
return nil, err
27+
}
28+
block, _ := pem.Decode(r)
29+
if block == nil {
30+
return nil, fmt.Errorf("no PEM found in the file %s", path)
31+
}
32+
caRoot, err := x509.ParseCertificate(block.Bytes)
33+
if err != nil {
34+
return nil, err
35+
}
36+
certPool := x509.NewCertPool()
37+
certPool.AddCert(caRoot)
38+
return certPool, nil
39+
}
40+
2241
func runACME(listenAddr string, m http.Handler) error {
2342
// If HTTP Challenge enabled, needs to be serving on port 80. For TLSALPN needs 443.
2443
// Due to docker port mapping this can't be checked programmatically
@@ -40,25 +59,17 @@ func runACME(listenAddr string, m http.Handler) error {
4059
// Try to use private CA root if provided, otherwise defaults to system's trust
4160
var certPool *x509.CertPool
4261
if setting.AcmeCARoot != "" {
43-
r, err := os.ReadFile(setting.AcmeCARoot)
62+
var err error
63+
certPool, err = getCARoot(setting.AcmeCARoot)
4464
if err != nil {
45-
log.Warn("Failed to read CA Root certificate, using default CA trust: %v", err)
46-
} else {
47-
block, _ := pem.Decode(r)
48-
caRoot, err := x509.ParseCertificate(block.Bytes)
49-
if err != nil {
50-
log.Warn("Failed to parse CA Root certificate, using default CA trust: %v", err)
51-
} else {
52-
certPool = x509.NewCertPool()
53-
certPool.AddCert(caRoot)
54-
}
65+
log.Warn("Failed to parse CA Root certificate, using default CA trust: %v", err)
5566
}
5667
}
5768
myACME := certmagic.NewACMEManager(magic, certmagic.ACMEManager{
5869
CA: setting.AcmeURL,
5970
TrustedRoots: certPool,
6071
Email: setting.AcmeEmail,
61-
Agreed: setting.LetsEncryptTOS,
72+
Agreed: setting.AcmeTOS,
6273
DisableHTTPChallenge: !enableHTTPChallenge,
6374
DisableTLSALPNChallenge: !enableTLSALPNChallenge,
6475
ListenHost: setting.HTTPAddr,

modules/setting/setting.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ var (
110110
EnablePprof bool
111111
PprofDataPath string
112112
EnableAcme bool
113-
LetsEncryptTOS bool
113+
AcmeTOS bool
114114
AcmeLiveDirectory string
115115
AcmeEmail string
116116
AcmeURL string
@@ -634,10 +634,15 @@ func loadFromConf(allowEmpty bool, extraConfig string) {
634634
if EnableAcme {
635635
AcmeURL = sec.Key("ACME_URL").MustString("")
636636
AcmeCARoot = sec.Key("ACME_CA_ROOT").MustString("")
637-
LetsEncryptTOS = sec.Key("LETSENCRYPT_ACCEPTTOS").MustBool(false)
638-
// The TOS is only required when using LetsEncrypt
639-
if AcmeURL == "" && !LetsEncryptTOS {
640-
log.Fatal("Let's Encrypt TOS (LETSENCRYPT_ACCEPTTOS) is not accepted. Either accept it or configure a different ACME provider (ACME_URL)")
637+
// FIXME: DEPRECATED to be removed in v1.18.0
638+
if sec.HasKey("ACME_ACCEPTTOS") {
639+
AcmeTOS = sec.Key("ACME_ACCEPTTOS").MustBool(false)
640+
} else {
641+
deprecatedSetting("server", "LETSENCRYPT_ACCEPTTOS", "server", "ACME_ACCEPTTOS")
642+
AcmeTOS = sec.Key("LETSENCRYPT_ACCEPTTOS").MustBool(false)
643+
}
644+
if !AcmeTOS {
645+
log.Fatal("ACME TOS is not accepted (ACME_ACCEPTTOS).")
641646
}
642647
// FIXME: DEPRECATED to be removed in v1.18.0
643648
if sec.HasKey("ACME_DIRECTORY") {

0 commit comments

Comments
 (0)