@@ -12,9 +12,6 @@ package api
12
12
13
13
import (
14
14
"crypto/tls"
15
- "crypto/x509"
16
- "encoding/pem"
17
- "fmt"
18
15
stdLog "log"
19
16
"net"
20
17
"net/http"
@@ -23,10 +20,10 @@ import (
23
20
"github.com/gorilla/mux"
24
21
25
22
"github.com/DataDog/datadog-agent/cmd/security-agent/api/agent"
23
+ "github.com/DataDog/datadog-agent/comp/api/authtoken"
26
24
"github.com/DataDog/datadog-agent/comp/core/settings"
27
25
"github.com/DataDog/datadog-agent/comp/core/status"
28
26
workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def"
29
- "github.com/DataDog/datadog-agent/pkg/api/security"
30
27
"github.com/DataDog/datadog-agent/pkg/api/util"
31
28
pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup"
32
29
"github.com/DataDog/datadog-agent/pkg/util/log"
@@ -35,19 +32,21 @@ import (
35
32
36
33
// Server implements security agent API server
37
34
type Server struct {
38
- listener net.Listener
39
- agent * agent.Agent
35
+ listener net.Listener
36
+ agent * agent.Agent
37
+ tlsConfig * tls.Config
40
38
}
41
39
42
40
// NewServer creates a new Server instance
43
- func NewServer (statusComponent status.Component , settings settings.Component , wmeta workloadmeta.Component ) (* Server , error ) {
41
+ func NewServer (statusComponent status.Component , settings settings.Component , wmeta workloadmeta.Component , at authtoken. Component ) (* Server , error ) {
44
42
listener , err := newListener ()
45
43
if err != nil {
46
44
return nil , err
47
45
}
48
46
return & Server {
49
- listener : listener ,
50
- agent : agent .NewAgent (statusComponent , settings , wmeta ),
47
+ listener : listener ,
48
+ agent : agent .NewAgent (statusComponent , settings , wmeta ),
49
+ tlsConfig : at .GetTLSServerConfig (),
51
50
}, nil
52
51
}
53
52
@@ -62,43 +61,16 @@ func (s *Server) Start() error {
62
61
// Validate token for every request
63
62
r .Use (validateToken )
64
63
65
- err := util .CreateAndSetAuthToken (pkgconfigsetup .Datadog ())
66
- if err != nil {
67
- return err
68
- }
69
-
70
- hosts := []string {"127.0.0.1" , "localhost" }
71
- _ , rootCertPEM , rootKey , err := security .GenerateRootCert (hosts , 2048 )
72
- if err != nil {
73
- return fmt .Errorf ("unable to start TLS server" )
74
- }
75
-
76
- // PEM encode the private key
77
- rootKeyPEM := pem .EncodeToMemory (& pem.Block {
78
- Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (rootKey ),
79
- })
80
-
81
- // Create a TLS cert using the private key and certificate
82
- rootTLSCert , err := tls .X509KeyPair (rootCertPEM , rootKeyPEM )
83
- if err != nil {
84
- return fmt .Errorf ("invalid key pair: %v" , err )
85
- }
86
-
87
- tlsConfig := tls.Config {
88
- Certificates : []tls.Certificate {rootTLSCert },
89
- MinVersion : tls .VersionTLS13 ,
90
- }
91
-
92
64
// Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib
93
65
logWriter , _ := pkglogsetup .NewLogWriter (4 , log .ErrorLvl )
94
66
95
67
srv := & http.Server {
96
68
Handler : r ,
97
69
ErrorLog : stdLog .New (logWriter , "Error from the agent http API server: " , 0 ), // log errors to seelog,
98
- TLSConfig : & tlsConfig ,
70
+ TLSConfig : s . tlsConfig ,
99
71
WriteTimeout : pkgconfigsetup .Datadog ().GetDuration ("server_timeout" ) * time .Second ,
100
72
}
101
- tlsListener := tls .NewListener (s .listener , & tlsConfig )
73
+ tlsListener := tls .NewListener (s .listener , s . tlsConfig )
102
74
103
75
go srv .Serve (tlsListener ) //nolint:errcheck
104
76
return nil
0 commit comments