123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package fasthttp
- import (
- "crypto/rand"
- "crypto/rsa"
- "crypto/x509"
- "crypto/x509/pkix"
- "encoding/pem"
- "math/big"
- "time"
- )
- // GenerateTestCertificate generates a test certificate and private key based on the given host.
- func GenerateTestCertificate(host string) ([]byte, []byte, error) {
- priv, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- return nil, nil, err
- }
- serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
- serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
- if err != nil {
- return nil, nil, err
- }
- cert := &x509.Certificate{
- SerialNumber: serialNumber,
- Subject: pkix.Name{
- Organization: []string{"fasthttp test"},
- },
- NotBefore: time.Now(),
- NotAfter: time.Now().Add(365 * 24 * time.Hour),
- KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature,
- ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},
- SignatureAlgorithm: x509.SHA256WithRSA,
- DNSNames: []string{host},
- BasicConstraintsValid: true,
- IsCA: true,
- }
- certBytes, err := x509.CreateCertificate(
- rand.Reader, cert, cert, &priv.PublicKey, priv,
- )
- p := pem.EncodeToMemory(
- &pem.Block{
- Type: "PRIVATE KEY",
- Bytes: x509.MarshalPKCS1PrivateKey(priv),
- },
- )
- b := pem.EncodeToMemory(
- &pem.Block{
- Type: "CERTIFICATE",
- Bytes: certBytes,
- },
- )
- return b, p, err
- }
|