mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 20:22:44 +08:00 
			
		
		
		
	revert to gen csr on client
This commit is contained in:
		| @@ -2,9 +2,7 @@ package controller | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"crypto/ed25519" | 	"crypto/ed25519" | ||||||
| 	"crypto/rand" |  | ||||||
| 	"crypto/x509" | 	"crypto/x509" | ||||||
| 	"crypto/x509/pkix" |  | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| @@ -131,7 +129,7 @@ func register(w http.ResponseWriter, r *http.Request) { | |||||||
| 	//decode body | 	//decode body | ||||||
| 	var request config.RegisterRequest | 	var request config.RegisterRequest | ||||||
| 	if err := json.NewDecoder(r.Body).Decode(&request); err != nil { | 	if err := json.NewDecoder(r.Body).Decode(&request); err != nil { | ||||||
| 		logger.Log(3, "error decoding request", err.Error()) | 		logger.Log(0, "error decoding request", err.Error()) | ||||||
| 		errorResponse := models.ErrorResponse{ | 		errorResponse := models.ErrorResponse{ | ||||||
| 			Code: http.StatusBadRequest, Message: err.Error(), | 			Code: http.StatusBadRequest, Message: err.Error(), | ||||||
| 		} | 		} | ||||||
| @@ -141,7 +139,7 @@ func register(w http.ResponseWriter, r *http.Request) { | |||||||
| 	found := false | 	found := false | ||||||
| 	networks, err := logic.GetNetworks() | 	networks, err := logic.GetNetworks() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logger.Log(3, "no networks", err.Error()) | 		logger.Log(0, "no networks", err.Error()) | ||||||
| 		errorResponse := models.ErrorResponse{ | 		errorResponse := models.ErrorResponse{ | ||||||
| 			Code: http.StatusNotFound, Message: "no networks", | 			Code: http.StatusNotFound, Message: "no networks", | ||||||
| 		} | 		} | ||||||
| @@ -157,14 +155,14 @@ func register(w http.ResponseWriter, r *http.Request) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if !found { | 	if !found { | ||||||
| 		logger.Log(2, "valid access key not found") | 		logger.Log(0, "valid access key not found") | ||||||
| 		errorResponse := models.ErrorResponse{ | 		errorResponse := models.ErrorResponse{ | ||||||
| 			Code: http.StatusUnauthorized, Message: "You are unauthorized to access this endpoint.", | 			Code: http.StatusUnauthorized, Message: "You are unauthorized to access this endpoint.", | ||||||
| 		} | 		} | ||||||
| 		returnErrorResponse(w, r, errorResponse) | 		returnErrorResponse(w, r, errorResponse) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	privKey, cert, ca, err := genCerts(request.Name) | 	cert, ca, err := genCerts(&request.CSR, request.Key) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logger.Log(0, "failed to generater certs ", err.Error()) | 		logger.Log(0, "failed to generater certs ", err.Error()) | ||||||
| 		errorResponse := models.ErrorResponse{ | 		errorResponse := models.ErrorResponse{ | ||||||
| @@ -176,38 +174,37 @@ func register(w http.ResponseWriter, r *http.Request) { | |||||||
| 	response := config.RegisterResponse{ | 	response := config.RegisterResponse{ | ||||||
| 		CA:   *ca, | 		CA:   *ca, | ||||||
| 		Cert: *cert, | 		Cert: *cert, | ||||||
| 		Key:  *privKey, |  | ||||||
| 	} | 	} | ||||||
| 	w.WriteHeader(http.StatusOK) | 	w.WriteHeader(http.StatusOK) | ||||||
| 	json.NewEncoder(w).Encode(response) | 	json.NewEncoder(w).Encode(response) | ||||||
| } | } | ||||||
|  |  | ||||||
| func genCerts(name pkix.Name) (*ed25519.PrivateKey, *x509.Certificate, *x509.Certificate, error) { | func genCerts(csr *x509.CertificateRequest, publickey ed25519.PublicKey) (*x509.Certificate, *x509.Certificate, error) { | ||||||
| 	ca, err := tls.ReadCert("/etc/netmaker/root.pem") | 	ca, err := tls.ReadCert("/etc/netmaker/root.pem") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logger.Log(2, "root ca not found ", err.Error()) | 		logger.Log(2, "root ca not found ", err.Error()) | ||||||
| 		return nil, nil, nil, fmt.Errorf("root ca not found %w", err) | 		return nil, nil, fmt.Errorf("root ca not found %w", err) | ||||||
| 	} | 	} | ||||||
| 	key, err := tls.ReadKey("/etc/netmaker/root.key") | 	key, err := tls.ReadKey("/etc/netmaker/root.key") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logger.Log(2, "root key not found ", err.Error()) | 		logger.Log(2, "root key not found ", err.Error()) | ||||||
| 		return nil, nil, nil, fmt.Errorf("root key not found %w", err) | 		return nil, nil, fmt.Errorf("root key not found %w", err) | ||||||
| 	} | 	} | ||||||
| 	_, privKey, err := ed25519.GenerateKey(rand.Reader) | 	//_, privKey, err := ed25519.GenerateKey(rand.Reader) | ||||||
| 	if err != nil { | 	//if err != nil { | ||||||
| 		logger.Log(2, "failed to generate client key", err.Error()) | 	//	logger.Log(2, "failed to generate client key", err.Error()) | ||||||
| 		return nil, nil, nil, fmt.Errorf("client key generation failed %w", err) | 	//	return nil, nil, nil, fmt.Errorf("client key generation failed %w", err) | ||||||
| 	} | 	//} | ||||||
| 	csr, err := tls.NewCSR(privKey, name) | 	//csr, err := tls.NewCSR(privKey, name) | ||||||
| 	if err != nil { | 	//if err != nil { | ||||||
| 		logger.Log(2, "failed to generate client certificate requests", err.Error()) | 	//	logger.Log(2, "failed to generate client certificate requests", err.Error()) | ||||||
| 		return nil, nil, nil, fmt.Errorf("client certification request generation failed %w", err) | 	//	return nil, nil, nil, fmt.Errorf("client certification request generation failed %w", err) | ||||||
| 	} | 	//} | ||||||
|  | 	csr.PublicKey = publickey | ||||||
| 	cert, err := tls.NewEndEntityCert(*key, csr, ca, tls.CERTIFICATE_VALIDITY) | 	cert, err := tls.NewEndEntityCert(*key, csr, ca, tls.CERTIFICATE_VALIDITY) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		logger.Log(2, "unable to generate client certificate", err.Error()) | 		logger.Log(2, "unable to generate client certificate", err.Error()) | ||||||
| 		return nil, nil, nil, fmt.Errorf("client certification generation failed %w", err) | 		return nil, nil, fmt.Errorf("client certification generation failed %w", err) | ||||||
| 	} | 	} | ||||||
| 	return &privKey, ca, cert, nil | 	return ca, cert, nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,7 +4,6 @@ import ( | |||||||
| 	//"github.com/davecgh/go-spew/spew" | 	//"github.com/davecgh/go-spew/spew" | ||||||
| 	"crypto/ed25519" | 	"crypto/ed25519" | ||||||
| 	"crypto/x509" | 	"crypto/x509" | ||||||
| 	"crypto/x509/pkix" |  | ||||||
| 	"encoding/base64" | 	"encoding/base64" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| @@ -43,13 +42,13 @@ type ServerConfig struct { | |||||||
|  |  | ||||||
| // RegisterRequest - struct for registation with netmaker server | // RegisterRequest - struct for registation with netmaker server | ||||||
| type RegisterRequest struct { | type RegisterRequest struct { | ||||||
| 	Name pkix.Name | 	CSR x509.CertificateRequest | ||||||
|  | 	Key ed25519.PublicKey | ||||||
| } | } | ||||||
|  |  | ||||||
| type RegisterResponse struct { | type RegisterResponse struct { | ||||||
| 	CA   x509.Certificate | 	CA   x509.Certificate | ||||||
| 	Cert x509.Certificate | 	Cert x509.Certificate | ||||||
| 	Key  ed25519.PrivateKey |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // Write - writes the config of a client to disk | // Write - writes the config of a client to disk | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ import ( | |||||||
| 	"github.com/gravitl/netmaker/netclient/config" | 	"github.com/gravitl/netmaker/netclient/config" | ||||||
| 	"github.com/gravitl/netmaker/netclient/ncutils" | 	"github.com/gravitl/netmaker/netclient/ncutils" | ||||||
| 	"github.com/gravitl/netmaker/tls" | 	"github.com/gravitl/netmaker/tls" | ||||||
| 	"github.com/kr/pretty" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func Register(cfg *config.ClientConfig) error { | func Register(cfg *config.ClientConfig) error { | ||||||
| @@ -25,27 +24,23 @@ func Register(cfg *config.ClientConfig) error { | |||||||
| 		return errors.New("no access key provided") | 		return errors.New("no access key provided") | ||||||
| 	} | 	} | ||||||
| 	//create certificate request | 	//create certificate request | ||||||
| 	_, key, err := ed25519.GenerateKey(rand.Reader) | 	public, private, err := ed25519.GenerateKey(rand.Reader) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	name := tls.NewCName(os.Getenv("HOSTNAME")) | 	name := tls.NewCName(os.Getenv("HOSTNAME")) | ||||||
| 	csr, err := tls.NewCSR(key, name) | 	csr, err := tls.NewCSR(private, name) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	data := config.RegisterRequest{ | 	data := config.RegisterRequest{ | ||||||
| 		Name: name, |  | ||||||
| 		CSR: *csr, | 		CSR: *csr, | ||||||
|  | 		Key: public, | ||||||
| 	} | 	} | ||||||
| 	pretty.Println(data.CSR.PublicKey) |  | ||||||
| 	pretty.Println(data.CSR.RawSubjectPublicKeyInfo) |  | ||||||
| 	pretty.Println("data\n", data) |  | ||||||
| 	payload, err := json.Marshal(data) | 	payload, err := json.Marshal(data) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	os.WriteFile("/tmp/data", payload, os.ModePerm) |  | ||||||
| 	url := cfg.Server.API + "/api/server/register" | 	url := cfg.Server.API + "/api/server/register" | ||||||
| 	log.Println("registering at ", url) | 	log.Println("registering at ", url) | ||||||
|  |  | ||||||
| @@ -73,7 +68,7 @@ func Register(cfg *config.ClientConfig) error { | |||||||
| 	if err := tls.SaveCert(ncutils.GetNetclientPath()+cfg.Server.Server+"/", "client.pem", &resp.Cert); err != nil { | 	if err := tls.SaveCert(ncutils.GetNetclientPath()+cfg.Server.Server+"/", "client.pem", &resp.Cert); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	if err := tls.SaveKey(ncutils.GetNetclientPath()+cfg.Server.Server+"/", "client.key", resp.Key); err != nil { | 	if err := tls.SaveKey(ncutils.GetNetclientPath()+cfg.Server.Server+"/", "client.key", private); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Log(0, "certificates/key saved ") | 	logger.Log(0, "certificates/key saved ") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Matthew R. Kasun
					Matthew R. Kasun