mirror of
https://github.com/gravitl/netmaker.git
synced 2025-11-02 21:14:05 +08:00
use openssl to gen client key/cert
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/netclient/config"
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
"github.com/gravitl/netmaker/servercfg"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"github.com/gravitl/netmaker/tls"
|
"github.com/gravitl/netmaker/tls"
|
||||||
)
|
)
|
||||||
@@ -163,7 +164,9 @@ func register(w http.ResponseWriter, r *http.Request) {
|
|||||||
returnErrorResponse(w, r, errorResponse)
|
returnErrorResponse(w, r, errorResponse)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cert, ca, err := genCerts(&request.CSR, request.Key)
|
// not working --- use openssl instead
|
||||||
|
// cert, ca, err := genCerts(&request.CSR, request.Key)
|
||||||
|
key, cert, ca, err := genOpenSSLCerts()
|
||||||
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{
|
||||||
@@ -172,6 +175,7 @@ func register(w http.ResponseWriter, r *http.Request) {
|
|||||||
returnErrorResponse(w, r, errorResponse)
|
returnErrorResponse(w, r, errorResponse)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
response := config.RegisterResponse{
|
response := config.RegisterResponse{
|
||||||
CA: *ca,
|
CA: *ca,
|
||||||
Cert: *cert,
|
Cert: *cert,
|
||||||
@@ -201,6 +205,7 @@ func genCerts(csr *x509.CertificateRequest, publickey ed25519.PublicKey) (*x509.
|
|||||||
// 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
|
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 {
|
||||||
@@ -209,3 +214,32 @@ func genCerts(csr *x509.CertificateRequest, publickey ed25519.PublicKey) (*x509.
|
|||||||
}
|
}
|
||||||
return ca, cert, nil
|
return ca, cert, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func genOpenSSLCerts() (*ed25519.PrivateKey, *x509.Certificate, *x509.Certificate, error) {
|
||||||
|
cmd1 := "openssl genpkey -algorithm Ed25519 -out /tmp/client.key"
|
||||||
|
cmd2 := "openssl req -new -out /tmp/client.csr -key tmp/client.key -subj '/CN=client'"
|
||||||
|
cmd3 := "openssl x509 -req -in /tmp/client.csr -days 365 -CA /etc/netmaker/root.pem -CAkey /etc/netmaker/root.key -CAcreateserial -out /tmp/client.pem"
|
||||||
|
|
||||||
|
if _, err := ncutils.RunCmd(cmd1, true); err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("client key error %w", err)
|
||||||
|
}
|
||||||
|
if _, err := ncutils.RunCmd(cmd2, true); err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("client csr error %w", err)
|
||||||
|
}
|
||||||
|
if _, err := ncutils.RunCmd(cmd3, true); err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("client cert error %w", err)
|
||||||
|
}
|
||||||
|
key, err := tls.ReadKey("/tmp/client.key")
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("read client key error %w", err)
|
||||||
|
}
|
||||||
|
cert, err := tls.ReadCert("/tmp/client.pem")
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("read client cert error %w", err)
|
||||||
|
}
|
||||||
|
ca, err := tls.ReadCert("/etc/netmaker/root.pem")
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, fmt.Errorf("read ca cert error %w", err)
|
||||||
|
}
|
||||||
|
return key, cert, ca, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ type RegisterRequest struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type RegisterResponse struct {
|
type RegisterResponse struct {
|
||||||
|
Key ed25519.PrivateKey
|
||||||
CA x509.Certificate
|
CA x509.Certificate
|
||||||
Cert x509.Certificate
|
Cert x509.Certificate
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,8 +288,8 @@ func NewTLSConfig(cfg *config.ClientConfig, server string) *tls.Config {
|
|||||||
logger.Log(0, "failed to append cert")
|
logger.Log(0, "failed to append cert")
|
||||||
}
|
}
|
||||||
//mycert, err := ssl.ReadCert("/etc/netclient/" + server + "/client.pem")
|
//mycert, err := ssl.ReadCert("/etc/netclient/" + server + "/client.pem")
|
||||||
//clientKeyPair, err := tls.LoadX509KeyPair("/etc/netclient/"+server+"/client.pem", "/etc/netclient/client.key")
|
clientKeyPair, err := tls.LoadX509KeyPair("/etc/netclient/"+server+"/client.pem", "/etc/netclient/client.key")
|
||||||
clientKeyPair, err := tls.LoadX509KeyPair("/home/mkasun/tmp/client.pem", "/home/mkasun/tmp/client.key")
|
//clientKeyPair, err := tls.LoadX509KeyPair("/home/mkasun/tmp/client.pem", "/home/mkasun/tmp/client.key")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("could not read client cert/key %v \n", err)
|
log.Fatalf("could not read client cert/key %v \n", err)
|
||||||
}
|
}
|
||||||
|
|||||||
33
tls/tls.go
33
tls/tls.go
@@ -100,9 +100,11 @@ func NewCSR(key ed25519.PrivateKey, name pkix.Name) (*x509.CertificateRequest, e
|
|||||||
dnsnames := []string{}
|
dnsnames := []string{}
|
||||||
dnsnames = append(dnsnames, name.CommonName)
|
dnsnames = append(dnsnames, name.CommonName)
|
||||||
derCertRequest, err := x509.CreateCertificateRequest(rand.Reader, &x509.CertificateRequest{
|
derCertRequest, err := x509.CreateCertificateRequest(rand.Reader, &x509.CertificateRequest{
|
||||||
Subject: name,
|
Subject: name,
|
||||||
PublicKey: key.Public(),
|
PublicKey: key.Public(),
|
||||||
DNSNames: dnsnames,
|
DNSNames: dnsnames,
|
||||||
|
PublicKeyAlgorithm: x509.Ed25519,
|
||||||
|
Version: 3,
|
||||||
}, key)
|
}, key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -152,10 +154,10 @@ func NewEndEntityCert(key ed25519.PrivateKey, req *x509.CertificateRequest, pare
|
|||||||
SerialNumber: serialNumber(),
|
SerialNumber: serialNumber(),
|
||||||
SignatureAlgorithm: req.SignatureAlgorithm,
|
SignatureAlgorithm: req.SignatureAlgorithm,
|
||||||
PublicKeyAlgorithm: req.PublicKeyAlgorithm,
|
PublicKeyAlgorithm: req.PublicKeyAlgorithm,
|
||||||
//PublicKey: req.PublicKey,
|
PublicKey: key.Public(),
|
||||||
Subject: req.Subject,
|
Subject: req.Subject,
|
||||||
SubjectKeyId: req.RawSubject,
|
SubjectKeyId: req.RawSubject,
|
||||||
Issuer: parent.Subject,
|
Issuer: parent.Subject,
|
||||||
}
|
}
|
||||||
rootCa, err := x509.CreateCertificate(rand.Reader, template, parent, key.Public(), key)
|
rootCa, err := x509.CreateCertificate(rand.Reader, template, parent, key.Public(), key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -168,6 +170,23 @@ func NewEndEntityCert(key ed25519.PrivateKey, req *x509.CertificateRequest, pare
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SaveRequest(path, name string, csr *x509.CertificateRequest) error {
|
||||||
|
if err := os.MkdirAll(path, 0644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
requestOut, err := os.Create(path + name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer requestOut.Close()
|
||||||
|
if err := pem.Encode(requestOut, &pem.Block{
|
||||||
|
Type: "CERTIFICATE REQUEST",
|
||||||
|
Bytes: csr.Raw,
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func SaveCert(path, name string, cert *x509.Certificate) error {
|
func SaveCert(path, name string, cert *x509.Certificate) error {
|
||||||
//certbytes, err := x509.ParseCertificate(cert)
|
//certbytes, err := x509.ParseCertificate(cert)
|
||||||
if err := os.MkdirAll(path, 0644); err != nil {
|
if err := os.MkdirAll(path, 0644); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user