package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "log" "math/big" "net" "os" "path/filepath" "time" ) func main() { certDir := "testdata/certificate" if err := os.MkdirAll(certDir, 0755); err != nil { log.Fatalf("Failed to create directory %s: %v", certDir, err) } template := &x509.Certificate{ SerialNumber: big.NewInt(1), Subject: pkix.Name{ Organization: []string{"Gin Test"}, CommonName: "localhost", }, NotBefore: time.Now(), NotAfter: time.Now().Add(365 * 24 * time.Hour), // 1 year validity KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, BasicConstraintsValid: true, DNSNames: []string{"localhost"}, IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1), net.IPv6loopback}, } privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatalf("Failed to generate private key: %v", err) } derBytes, err := x509.CreateCertificate(rand.Reader, template, template, &privateKey.PublicKey, privateKey) if err != nil { log.Fatalf("Failed to create certificate: %v", err) } certPath := filepath.Join(certDir, "cert.pem") certOut, err := os.Create(certPath) if err != nil { log.Fatalf("Failed to open %s for writing: %v", certPath, err) } if err := pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { log.Fatalf("Failed to write data to %s: %v", certPath, err) } if err := certOut.Close(); err != nil { log.Fatalf("Error closing %s: %v", certPath, err) } log.Printf("Wrote %s\n", certPath) keyPath := filepath.Join(certDir, "key.pem") keyOut, err := os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) if err != nil { log.Fatalf("Failed to open %s for writing: %v", keyPath, err) } privBytes := x509.MarshalPKCS1PrivateKey(privateKey) if err := pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: privBytes}); err != nil { log.Fatalf("Failed to write data to %s: %v", keyPath, err) } if err := keyOut.Close(); err != nil { log.Fatalf("Error closing %s: %v", keyPath, err) } log.Printf("Wrote %s\n", keyPath) }