generate_server_certificates.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "crypto/ed25519"
  4. "crypto/rand"
  5. "fmt"
  6. "log"
  7. "os"
  8. "github.com/gravitl/netmaker/tls"
  9. )
  10. // generate root ca/key and server certificate/key for use with mq
  11. func main() {
  12. if len(os.Args) < 2 {
  13. fmt.Printf("usage %s: server-name(fqdn) or IP address\n", os.Args[0])
  14. os.Exit(1)
  15. }
  16. server := os.Args[1]
  17. caName := tls.NewName("CA Root", "US", "Gravitl")
  18. serverName := tls.NewCName(server)
  19. _, sk, err := ed25519.GenerateKey(rand.Reader)
  20. if err != nil {
  21. log.Fatal("generate server key ", err)
  22. }
  23. _, key, err := ed25519.GenerateKey(rand.Reader)
  24. if err != nil {
  25. log.Fatal("generate root key ", err)
  26. }
  27. csr, err := tls.NewCSR(key, caName)
  28. if err != nil {
  29. log.Fatal("generate root request ", err)
  30. }
  31. serverCSR, err := tls.NewCSR(sk, serverName)
  32. if err != nil {
  33. log.Fatal("generate server request ", err)
  34. }
  35. rootCA, err := tls.SelfSignedCA(key, csr, 365)
  36. if err != nil {
  37. log.Fatal("generate root ca ", err)
  38. }
  39. serverCert, err := tls.NewEndEntityCert(key, serverCSR, rootCA, 365)
  40. if err != nil {
  41. log.Fatal("generate server certificate", err)
  42. }
  43. err = tls.SaveCert("./certs/", "server.pem", serverCert)
  44. if err != nil {
  45. log.Fatal("save server certificate", err)
  46. }
  47. err = tls.SaveCert("./certs/", "root.pem", rootCA)
  48. if err != nil {
  49. log.Fatal("save root ca ", err)
  50. }
  51. err = tls.SaveKey("./certs/", "root.key", sk)
  52. if err != nil {
  53. log.Fatal("save root key ", err)
  54. }
  55. err = tls.SaveKey("./certs/", "server.key", sk)
  56. if err != nil {
  57. log.Fatal("save server key", err)
  58. }
  59. }