ZBLOG

golang 编写生成 SSL 证书和私钥

下面是一个示例代码,可以使用 Golang 生成 SSL 证书和私钥:

package main

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

func main() {
    // 生成 RSA 密钥对
    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        fmt.Println("Failed to generate private key:", err)
        return
    }

    // 生成证书模板
    certTemplate := x509.Certificate{
        SerialNumber: big.NewInt(time.Now().Unix()),
        Subject:      pkix.Name{CommonName: "example.com"},
        NotBefore:    time.Now(),
        NotAfter:     time.Now().AddDate(1, 0, 0),
        KeyUsage:     x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment,
        ExtKeyUsage:  []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
        DNSNames:     []string{"example.com", "www.example.com"},
    }

    // 将证书模板序列化为 DER 格式
    derBytes, err := x509.CreateCertificate(rand.Reader, &certTemplate, &certTemplate, &privateKey.PublicKey, privateKey)
    if err != nil {
        fmt.Println("Failed to create certificate:", err)
        return
    }

    // 创建 PEM 编码的证书文件
    certOut, err := os.Create("cert.pem")
    if err != nil {
        fmt.Println("Failed to create cert.pem:", err)
        return
    }
    pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
    certOut.Close()
    fmt.Println("Wrote cert.pem")

    // 创建 PEM 编码的私钥文件
    keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
    if err != nil {
        fmt.Println("Failed to open key.pem for writing:", err)
        return
    }
    pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)})
    keyOut.Close()
    fmt.Println("Wrote key.pem")
}

运行上述代码后,会生成 cert.pemkey.pem 两个文件,其中 cert.pem 是 PEM 编码的证书,key.pem 是 PEM 编码的私钥。这些文件可以用于启用 SSL/TLS 加密连接。在实际生产环境中,建议使用更安全的加密算法和密钥长度。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2207

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?