tls.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package tls
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "crypto/x509"
  6. "crypto/x509/pkix"
  7. "encoding/pem"
  8. "log"
  9. "math/big"
  10. "time"
  11. "v2ray.com/core/common"
  12. v2tls "v2ray.com/core/transport/internet/tls"
  13. )
  14. func GenerateCertificateForTest() *v2tls.Certificate {
  15. priv, err := rsa.GenerateKey(rand.Reader, 2048)
  16. common.Must(err)
  17. serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
  18. serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
  19. if err != nil {
  20. log.Fatalf("failed to generate serial number: %s", err)
  21. }
  22. template := x509.Certificate{
  23. SerialNumber: serialNumber,
  24. Subject: pkix.Name{
  25. Organization: []string{"V2Ray Inc"},
  26. },
  27. NotBefore: time.Now().Add(time.Hour * -1),
  28. NotAfter: time.Now().Add(time.Hour),
  29. KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
  30. ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
  31. BasicConstraintsValid: true,
  32. DNSNames: []string{"www.v2ray.com", "v2ray.com"},
  33. }
  34. derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv)
  35. common.Must(err)
  36. certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
  37. keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
  38. return &v2tls.Certificate{
  39. Certificate: certPEM,
  40. Key: keyPEM,
  41. }
  42. }