为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中创建与本地主机的 openssl 相同的密钥和证书

在 golang 中创建与本地主机的 openssl 相同的密钥和证书

Go
繁星淼淼 2022-10-17 17:02:11
如何在 Go 中编写与以下 openssl 命令等效的代码?openssl req -subj /C=/ST=/O=/L=/CN=localhost/OU=/ -x509 -nodes -days 3650  \             -newkey rsa:4096 -keyout test.key -out test.crt目标是根据其证书请求生成新证书。
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

通过这种方式找到了我的解决方案-


key, err := rsa.GenerateKey(rand.Reader, 4096)

    if err != nil {

        return "", "", err

    }

    keyBytes := x509.MarshalPKCS1PrivateKey(key)

    // PEM encoding of private key

    keyPEM := pem.EncodeToMemory(

        &pem.Block{

            Type:  "RSA PRIVATE KEY",

            Bytes: keyBytes,

        },

    )

    fmt.Println(string(keyPEM))

    

    notBefore := time.Now()

    notAfter := notBefore.Add(365*24*10*time.Hour)


    //Create certificate templet

    template := x509.Certificate{

        SerialNumber:          big.NewInt(0),

        Subject:               pkix.Name{CommonName: "localhost"},

        SignatureAlgorithm:    x509.SHA256WithRSA,

        NotBefore:             notBefore,

        NotAfter:              notAfter,

        BasicConstraintsValid: true,

        KeyUsage:              x509.KeyUsageDigitalSignature | x509.KeyUsageKeyAgreement | x509.KeyUsageKeyEncipherment | x509.KeyUsageDataEncipherment,

        ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},

    }

    //Create certificate using templet

    derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)

    if err != nil {

        return "", "", err


    }

    //pem encoding of certificate

    certPem := string(pem.EncodeToMemory(

        &pem.Block{

            Type:  "CERTIFICATE",

            Bytes: derBytes,

        },

    ))

    fmt.Println(certPem))


查看完整回答
反对 回复 2022-10-17
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您可能会考虑cloudflare/cfssl,其中包括一个cfssl.initca包,如下所示

  var req *csr.CertificateRequest

    hostname := "cloudflare.com"

    crl := "http://crl.cloudflare.com/655c6a9b-01c6-4eea-bf21-be690cc315e0.crl" //cert_uuid.crl

    for _, param := range validKeyParams {

        for _, caconfig := range validCAConfigs {

            req = &csr.CertificateRequest{

                Names: []csr.Name{

                    {

                        C:  "US",

                        ST: "California",

                        L:  "San Francisco",

                        O:  "CloudFlare",

                        OU: "Systems Engineering",

                    },

                },

                CN:         hostname,

                Hosts:      []string{hostname, "www." + hostname},

                KeyRequest: &param,

                CA:         &caconfig,

                CRL:        crl,

            }

            certBytes, _, keyBytes, err := New(req)

            if err != nil {

                t.Fatal("InitCA failed:", err)

            }


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号