key.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "bytes"
  4. "crypto/rand"
  5. "crypto/rsa"
  6. "crypto/tls"
  7. "crypto/x509"
  8. "crypto/x509/pkix"
  9. "encoding/gob"
  10. "encoding/pem"
  11. "fmt"
  12. "log"
  13. "math/big"
  14. "time"
  15. )
  16. func mainb() {
  17. var leaderPrivateKey *rsa.PrivateKey
  18. leaderPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048)
  19. if err != nil {
  20. log.Fatal("Private key cannot be created.", err.Error())
  21. }
  22. // Generate a pem block with the private key
  23. keyPem := pem.EncodeToMemory(&pem.Block{
  24. Type: "RSA PRIVATE KEY",
  25. Bytes: x509.MarshalPKCS1PrivateKey(leaderPrivateKey),
  26. })
  27. tml := x509.Certificate{
  28. // you can add any attr that you need
  29. NotBefore: time.Now(),
  30. NotAfter: time.Now().AddDate(5, 0, 0),
  31. // you have to generate a different serial number each execution
  32. SerialNumber: big.NewInt(123123),
  33. Subject: pkix.Name{
  34. CommonName: "New Name",
  35. Organization: []string{"New Org."},
  36. },
  37. BasicConstraintsValid: true,
  38. }
  39. cert, err := x509.CreateCertificate(rand.Reader, &tml, &tml, &leaderPrivateKey.PublicKey, leaderPrivateKey)
  40. if err != nil {
  41. log.Fatal("Certificate cannot be created.", err.Error())
  42. }
  43. // Generate a pem block with the certificate
  44. certPem := pem.EncodeToMemory(&pem.Block{
  45. Type: "CERTIFICATE",
  46. Bytes: cert,
  47. })
  48. tlsCert, err := tls.X509KeyPair(certPem, keyPem)
  49. if err != nil {
  50. log.Fatal("Cannot be loaded the certificate.", err.Error())
  51. }
  52. //listens for clients
  53. config := &tls.Config{Certificates: []tls.Certificate{tlsCert}}
  54. lnClients, err := tls.Listen("tcp", ":4441", config)
  55. if err != nil {
  56. panic(err)
  57. }
  58. defer lnClients.Close()
  59. var pub rsa.PublicKey = leaderPrivateKey.PublicKey
  60. var network bytes.Buffer
  61. enc := gob.NewEncoder(&network)
  62. dec := gob.NewDecoder(&network)
  63. enc.Encode(pub)
  64. var pubRec rsa.PublicKey
  65. dec.Decode(&pubRec)
  66. fmt.Println(pub)
  67. fmt.Println(pubRec)
  68. }