@@ -7,6 +7,7 @@ package cmd
7
7
import (
8
8
"crypto/x509"
9
9
"encoding/pem"
10
+ "fmt"
10
11
"net/http"
11
12
"os"
12
13
"strconv"
@@ -19,6 +20,24 @@ import (
19
20
"github.com/caddyserver/certmagic"
20
21
)
21
22
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
+
22
41
func runACME (listenAddr string , m http.Handler ) error {
23
42
// If HTTP Challenge enabled, needs to be serving on port 80. For TLSALPN needs 443.
24
43
// Due to docker port mapping this can't be checked programmatically
@@ -40,25 +59,17 @@ func runACME(listenAddr string, m http.Handler) error {
40
59
// Try to use private CA root if provided, otherwise defaults to system's trust
41
60
var certPool * x509.CertPool
42
61
if setting .AcmeCARoot != "" {
43
- r , err := os .ReadFile (setting .AcmeCARoot )
62
+ var err error
63
+ certPool , err = getCARoot (setting .AcmeCARoot )
44
64
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 )
55
66
}
56
67
}
57
68
myACME := certmagic .NewACMEManager (magic , certmagic.ACMEManager {
58
69
CA : setting .AcmeURL ,
59
70
TrustedRoots : certPool ,
60
71
Email : setting .AcmeEmail ,
61
- Agreed : setting .LetsEncryptTOS ,
72
+ Agreed : setting .AcmeTOS ,
62
73
DisableHTTPChallenge : ! enableHTTPChallenge ,
63
74
DisableTLSALPNChallenge : ! enableTLSALPNChallenge ,
64
75
ListenHost : setting .HTTPAddr ,
0 commit comments