记录一下 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)
}
}