Files
be.ems/tools/casign/casign.go
2023-08-23 13:21:57 +08:00

101 lines
2.4 KiB
Go

package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"crypto/x509/pkix"
"encoding/pem"
"fmt"
"math/big"
"os"
"time"
)
func main() {
// 生成私钥
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
fmt.Println("Failed to generate private key:", err)
return
}
// 创建根证书模板
ca := &x509.Certificate{
SerialNumber: big.NewInt(2023),
Subject: pkix.Name{CommonName: "Root CA"},
NotBefore: time.Now(),
//NotAfter: time.Now().AddDate(10, 0, 0), // 有效期为10年
NotAfter: time.Now().AddDate(0, 0, 1), // 有效期为10年
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageCRLSign,
BasicConstraintsValid: true,
IsCA: true,
}
// 使用私钥对根证书进行签名
caBytes, err := x509.CreateCertificate(rand.Reader, ca, ca, &privateKey.PublicKey, privateKey)
if err != nil {
fmt.Println("Failed to create CA certificate:", err)
return
}
// 将根证书保存到文件
caFile, err := os.Create("ca_cert.pem")
if err != nil {
fmt.Println("Failed to create CA certificate file:", err)
return
}
defer caFile.Close()
err = pem.Encode(caFile, &pem.Block{
Type: "CERTIFICATE",
Bytes: caBytes,
})
if err != nil {
fmt.Println("Failed to write CA certificate to file:", err)
return
}
fmt.Println("Root CA certificate generated successfully.")
// 将公钥保存到文件
publicKeyBytes := x509.MarshalPKCS1PublicKey(&privateKey.PublicKey)
publicKeyFile, err := os.Create("public_key.pem")
if err != nil {
fmt.Println("Failed to create public key file:", err)
return
}
defer publicKeyFile.Close()
err = pem.Encode(publicKeyFile, &pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: publicKeyBytes,
})
if err != nil {
fmt.Println("Failed to write public key to file:", err)
return
}
fmt.Println("Public key generated successfully.")
// 将私钥保存到文件
privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey)
privateKeyFile, err := os.Create("private_key.pem")
if err != nil {
fmt.Println("Failed to create private key file:", err)
return
}
defer privateKeyFile.Close()
err = pem.Encode(privateKeyFile, &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: privateKeyBytes,
})
if err != nil {
fmt.Println("Failed to write private key to file:", err)
return
}
fmt.Println("Private key generated successfully.")
}