golang生成证书

生成证书是一个涉及到安全和加密的重要过程,一般需要借助专业的工具或库来完成。在 Golang 中,你可以使用标准库 crypto/tls 来生成证书。

下面是一个简单的示例,展示了如何使用 Golang 生成自签名证书:

package main
import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "crypto/x509/pkix"
    "encoding/pem"
    "math/big"
    "net"
    "time"
func main() {
    // 创建一个新的 RSA 密钥对
    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        panic(err)
    // 为证书生成一个唯一的序列号
    serialNumber, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64))
    if err != nil {
        panic(err)
    // 定义证书的信息
    subject := pkix.Name{
        Organization: []string{"Acme Co"},
        CommonName:   "example.com",
    template := x509.Certificate{
        SerialNumber: serialNumber,
        Subject:      subject,
        NotBefore:    time.Now(),
        NotAfter:     time.Now().AddDate(1, 0, 0),
        KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
        ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
        BasicConstraintsValid: true,
        IsCA:                  true,
        DNSNames:              []string{"example.com", "localhost"},
        IPAddresses:           []net.IP{net.ParseIP("127.0.0.1")},
    // 使用证书信息、密钥对和自签名 CA 生成证书
    derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &privateKey.PublicKey, privateKey)
    if err != nil {
        panic(err)
    // 将证书和私钥保存到文件中
    certOut, err := os.Create("cert.pem")
    if err != nil {
        panic(err)
    pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
    certOut.Close()
    keyOut, err := os.Create("key.pem")
    if err != nil {
        panic(err)
    pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)})
    keyOut.Close()

上述代码会生成一个自签名证书,并将证书和私钥保存到 cert.pemkey.pem 文件中。你可以根据自己的需要修改证书信息、密钥位数、有效期等参数,以生成符合自己需求的证书。

  •