feat: use randomly generated key in fleetctl preview

This commit is contained in:
Jahziel Villasana-Espinoza 2024-05-24 18:41:48 -04:00
parent c808588e1b
commit 988c085f0a

View file

@ -2,7 +2,9 @@ package main
import (
"context"
"crypto/rand"
"crypto/tls"
"encoding/hex"
"errors"
"fmt"
"io"
@ -215,6 +217,48 @@ Use the stop and reset subcommands to manage the server and dependencies once st
}
}
generatePrivateKey := func(n int) (string, error) {
bytes := make([]byte, n/2)
if _, err := rand.Read(bytes); err != nil {
return "", err
}
return hex.EncodeToString(bytes)[:n], nil
}
// Create a random private key for MDM asset encryption and save it to the filesystem
// for use in subsequent runs. If one already exists, use that one.
var pk string
pkFilename := filepath.Join(previewDir, ".private_key")
_, err = os.Stat(pkFilename)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
pk, err := generatePrivateKey(32) // use AES-256
if err != nil {
return fmt.Errorf("generating private key: %w", err)
}
if err := os.WriteFile(filepath.Join(previewDir, ".private_key"), []byte(pk), os.ModeAppend); err != nil {
return fmt.Errorf("writing private key file: %w", err)
}
}
return fmt.Errorf("stat private key file: %w", err)
}
if len(pk) == 0 {
filePK, err := os.ReadFile(pkFilename)
if err != nil {
return fmt.Errorf("reading private key file: %w", err)
}
pk = string(filePK)
}
if err := os.Setenv("FLEET_SERVER_PRIVATE_KEY", pk); err != nil {
return fmt.Errorf("failed to set private key: %w", err)
}
if err := os.Setenv("FLEET_VERSION", c.String(tagFlagName)); err != nil {
return fmt.Errorf("failed to set Fleet version: %w", err)
}