既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
* **rand**: 随机数生成器,用于生成证书的序列号等。
* **template**: 要创建的证书的模板。
* **parent**: 签发者的证书。如果要创建的是CA证书,则此处应为自己的证书;如果是非CA,则为上级CA的证书。
* **pub**: 被签发者的公钥。
* **priv**: 签发者的私钥,用于签署证书。
#### 创建CA证书
要创建一个CA证书,你需要设置`template`参数的某些字段,特别是IsCA字段和KeyUsage字段。
1. **生成CA的密钥对**:首先,你需要生成CA的密钥对。这通常涉及到创建一个RSA或者ECDSA的公钥和私钥。
priv, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
log.Fatalf(“生成RSA密钥出错: %v”, err)
}
pub := &priv.PublicKey
2. **创建CA证书模板**:然后,创建一个`x509.Certificate`的实例作为CA证书的模板。
ca := &x509.Certificate{
SerialNumber: big.NewInt(2020),
Subject: pkix.Name{
Organization: []string{“Example CA”},
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(10, 0, 0),
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},
BasicConstraintsValid: true,
IsCA: true,
}
3. **使用模板和私钥创建CA证书**:最后,使用`x509.CreateCertificate`函数和之前创建的密钥对创建CA证书。
caBytes, err := x509.CreateCertificate(rand.Reader, ca, ca, pub, priv)
if err != nil {
log.Fatalf(“创建CA证书失败: %v”, err)
}
#### 创建由CA签发的证书
一旦有了CA证书和相应的私钥,你就可以开始创建由该CA签发的证书了。这个过程和创建CA证书类似,不过需要将`parent`参数设置为CA证书,而`template`则为你想要创建的证书的模板。
1. **生成证书的密钥对**:和之前一样,首先生成公钥和私钥。
2. **创建证书模板**:创建一个`x509.Certificate`的实例作为证书的模板。确保IsCA字段为false,除非你想要这个证书作为中间CA。
3. **使用CA证书和私钥签发新证书**:使用`x509.CreateCertificate`函数、CA的证书、CA的私钥、新证书的公钥来创建新证书。
#### 代码示例
下面是一个完整的示例,展示了如何创建一个CA证书以及一个由该CA签发的证书。
package main
import (
“crypto/rand”
“crypto/rsa”
“crypto/x509”
“crypto/x509/pkix”
“math/big”
“time”
“log”
)
func main() {
// 为CA生成RSA密钥
caPriv, _ := rsa.GenerateKey(rand.Reader, 2048)
caPub := &caPriv.PublicKey
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**