golang 生成证书

记录一下 golang 生成证书,不熟py 用py 跑不起来 Idea agent 激活原理
还不如自己造一个轮子 0 依赖 感谢 jetbra-server-go 用golang 重复造个轮子吧


package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"crypto/x509/pkix"
	"encoding/pem"
	"math/big"
	"os"
	"time"
)

func main() {
	privateKey, err := rsa.GenerateKey(rand.Reader, 4096)
	if err != nil {
		panic(err)
	}

	serialNumber, err := rand.Int(rand.Reader, new(big.Int).Lsh(big.NewInt(1), 128))
	if err != nil {
		panic(err)
	}

	parent := x509.Certificate{
		SerialNumber: serialNumber,
		Subject: pkix.Name{
			CommonName: "JetProfile CA",
		},
		NotBefore:   time.Now().Add(-24 * time.Hour),
		NotAfter:    time.Now().AddDate(10, 0, 0),
		KeyUsage:    x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
		ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
	}
	template := parent
	
	certBytes, err := x509.CreateCertificate(rand.Reader, &template, &parent, &privateKey.PublicKey, privateKey)
	if err != nil {
		panic(err)
	}

	privateKeyPEM := pem.EncodeToMemory(&pem.Block{
		Type:  "RSA PRIVATE KEY",
		Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
	})

	certPEM := pem.EncodeToMemory(&pem.Block{
		Type:  "CERTIFICATE",
		Bytes: certBytes,
	})

	certificate, err := x509.ParseCertificate(certBytes)
	if err != nil {
		panic(err)
	}
	
	// Write the private key to a file
	err = os.WriteFile("ca.key", privateKeyPEM, 0600)
	if err != nil {
		panic(err)
	}

	// Write the certificate to a file
	err = os.WriteFile("ca.crt", certPEM, 0600)
	if err != nil {
		panic(err)
	}
}
10 个赞