请讲解下证书打印的内容

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: SM2-with-SM3
        Issuer: C = CN, ST = Zhejiang, O = Nuowei, OU = ursa_sm2, CN = node01_sm2.nuowei.com, emailAddress = node01_sm2@nuowei.com
        Validity
            Not Before: Apr 29 08:17:50 2025 GMT
            Not After : Apr  5 08:17:50 2125 GMT
        Subject: C = CN, ST = Zhejiang, L = Hangzhou, O = Nuowei, OU = Ursa, CN = admin.nuowei.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:af:fe:8c:02:86:90:96:73:ed:fd:73:f7:f3:a0:
                    d9:e8:01:70:52:c8:af:59:c4:92:67:1c:5e:06:49:
                    dd:3d:c6:fa:ca:e7:74:bb:60:e2:f5:2c:91:4a:7d:
                    9b:b7:33:8a:79:68:5c:c2:37:86:f0:f8:65:f3:fb:
                    f4:16:70:8b:06
                ASN1 OID: SM2
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication
            X509v3 Authority Key Identifier: 
                45:CC:ED:A6:94:D0:07:6F:58:C9:29:66:63:7E:A2:57:C0:51:6B:4F
    Signature Algorithm: SM2-with-SM3
    Signature Value:
        30:44:02:20:68:7b:b0:3a:cf:62:01:7e:73:cb:42:cc:f2:d3:
        f9:a6:84:7b:9f:c6:2a:58:16:fa:bd:af:4b:29:72:ca:47:fb:
        02:20:74:56:c1:9c:91:ee:e1:2d:ea:7f:3a:5b:9b:5e:c6:35:
        49:f2:07:b7:2a:ee:7c:0c:f4:6e:cd:69:b6:06:08:98

 

请讲解下证书打印的内容 
 
 
 
 
这份内容是一个数字证书的详细信息,它遵循X.509标准,用于在数字通信中验证身份和提供加密功能。以下是对证书内容的逐项解析:

1. 证书版本(Version)

  • 值:3 (0x2)
  • 含义:表示这是一个X.509版本3的证书。版本3是目前最常用的版本,支持扩展功能(如扩展字段X509v3)。

2. 序列号(Serial Number)

  • 值:1 (0x1)
  • 含义:序列号是证书的唯一标识符,由证书颁发机构(CA)分配。它用于区分同一CA颁发的不同证书。

3. 签名算法(Signature Algorithm)

  • 值:SM2-with-SM3
  • 含义:证书的签名算法使用了SM2(椭圆曲线公钥密码算法)和SM3(密码杂凑算法)。SM2和SM3是中国的国家密码算法标准,广泛应用于国内的安全通信场景。

4. 颁发者(Issuer)

  • 内容:
    C = CN, ST = Zhejiang, O = Nuowei, OU = ursa_sm2, CN = node01_sm2.nuowei.com, emailAddress = node01_sm2@nuowei.com
     
  • 含义:
    • C = CN:国家为“中国”。
    • ST = Zhejiang:省份为“浙江”。
    • O = Nuowei:组织为“Nuowei”。
    • OU = ursa_sm2:组织单位为“ursa_sm2”。
    • CN = node01_sm2.nuowei.com:颁发者的通用名称(Common Name)为“node01_sm2.nuowei.com”。
    • emailAddress = node01_sm2@nuowei.com:颁发者的电子邮件地址为“node01_sm2@nuowei.com”。

5. 有效期(Validity)

  • Not Before:2025年4月29日 08:17:50 GMT
  • Not After:2125年4月5日 08:17:50 GMT
  • 含义:证书从2025年4月29日开始生效,到2125年4月5日失效。这是一个非常长的有效期(100年),通常用于测试环境或特殊场景。

6. 主体(Subject)

  • 内容:
    C = CN, ST = Zhejiang, L = Hangzhou, O = Nuowei, OU = Ursa, CN = admin.nuowei.com
     
  • 含义:
    • C = CN:国家为“中国”。
    • ST = Zhejiang:省份为“浙江”。
    • L = Hangzhou:城市为“杭州”。
    • O = Nuowei:组织为“Nuowei”。
    • OU = Ursa:组织单位为“Ursa”。
    • CN = admin.nuowei.com:主体的通用名称为“admin.nuowei.com”。

7. 公钥信息(Subject Public Key Info)

  • 公钥算法:id-ecPublicKey(椭圆曲线公钥算法)
  • 公钥长度:256位
  • 公钥值:
    复制
    04:af:fe:8c:02:86:90:96:73:ed:fd:73:f7:f3:a0:
    d9:e8:01:70:52:c8:af:59:c4:92:67:1c:5e:06:49:
    dd:3d:c6:fa:ca:e7:74:bb:60:e2:f5:2c:91:4a:7d:
    9b:b7:33:8a:79:68:5c:c2:37:86:f0:f8:65:f3:fb:
    f4:16:70:8b:06
     
  • ASN1 OID:SM2
  • 含义:证书的公钥是基于SM2椭圆曲线密码算法的256位公钥,用于加密和验证签名。

8. X509v3扩展(X509v3 extensions)

  • X509v3 Key Usage:
    • 值:Digital Signature, Key Encipherment
    • 含义:公钥用于数字签名和密钥加密。
  • X509v3 Extended Key Usage:
    • 值:TLS Web Client Authentication
    • 含义:证书可用于TLS(传输层安全协议)的客户端身份验证。
  • X509v3 Authority Key Identifier:
    • 值:45:CC:ED:A6:94:D0:07:6F:58:C9:29:66:63:7E:A2:57:C0:51:6B:4F
    • 含义:颁发者密钥标识符,用于标识颁发者的公钥。

9. 签名值(Signature Value)

  • 值:
    复制
    30:44:02:20:68:7b:b0:3a:cf:62:01:7e:73:cb:42:cc:f2:d3:
    f9:a6:84:7b:9f:c6:2a:58:16:fa:bd:af:4b:29:72:ca:47:fb:
    02:20:74:56:c1:9c:91:ee:e1:2d:ea:7f:3a:5b:9b:5e:c6:35:
    49:f2:07:b7:2a:ee:7c:0c:f4:6e:cd:69:b6:06:08:98
     
  • 含义:这是使用SM2算法对证书内容进行签名后的值,用于验证证书的完整性和颁发者的身份。

总结

这份证书是一个基于SM2和SM3算法的数字证书,颁发者是node01_sm2.nuowei.com,主体是admin.nuowei.com,主要用于TLS客户端身份验证。证书的有效期非常长(100年),可能用于测试环境。
复制
分享
 
 
 
 
go语言如何计算sm2证书公钥的公钥值
 
 
 
搜索 Go SM2公钥值 示例代码
在Go语言中,可以通过使用gmsm/sm2库来计算SM2证书的公钥值。以下是实现这一功能的步骤和示例代码:

1. 安装依赖

首先,需要安装gmsm/sm2库,这是一个支持国密SM2算法的Go语言库。可以通过以下命令安装:
bash
复制
go get github.com/ZZMarquis/gm/sm2
 

2. 生成SM2密钥对

可以使用sm2.GenerateKey方法生成SM2密钥对。以下是生成密钥对的代码示例:
go
复制
package main

import (
	"crypto/rand"
	"fmt"
	"github.com/ZZMarquis/gm/sm2"
)

func main() {
	// 生成SM2密钥对
	privateKey, publicKey, err := sm2.GenerateKey(rand.Reader)
	if err != nil {
		fmt.Println("生成密钥对失败:", err)
		return
	}

	// 输出私钥和公钥
	fmt.Println("私钥:", privateKey)
	fmt.Println("公钥:", publicKey)
}
 

3. 获取公钥值

SM2的公钥由椭圆曲线上的一个点表示,通常以XY坐标的形式存储。可以通过访问publicKey.XpublicKey.Y来获取公钥的值。以下是获取公钥值的代码示例:
go
复制
package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"github.com/ZZMarquis/gm/sm2"
)

func main() {
	// 生成SM2密钥对
	privateKey, publicKey, err := sm2.GenerateKey(rand.Reader)
	if err != nil {
		fmt.Println("生成密钥对失败:", err)
		return
	}

	// 获取公钥的X和Y坐标
	x := publicKey.X.Bytes()
	y := publicKey.Y.Bytes()

	// 将X和Y坐标转换为十六进制字符串
	xHex := hex.EncodeToString(x)
	yHex := hex.EncodeToString(y)

	// 输出公钥值
	fmt.Printf("公钥X: %s\n", xHex)
	fmt.Printf("公钥Y: %s\n", yHex)
}
 

4. 将公钥转换为标准格式

在某些场景下,可能需要将公钥转换为符合ANSI标准的Base64格式。以下是将公钥转换为Base64格式的代码示例:
go
复制
package main

import (
	"crypto/rand"
	"encoding/base64"
	"encoding/hex"
	"fmt"
	"github.com/ZZMarquis/gm/sm2"
)

func PubToBase64(pub *sm2.PublicKey) string {
	// 获取公钥的X和Y坐标
	x := pub.X.Bytes()
	y := pub.Y.Bytes()

	// 拼接X和Y坐标
	rawBytes := append(x, y...)

	// 添加ANSI标准的头部
	pubHex := "3059301306072a8648ce3d020106082a811ccf5501822d03420004" + hex.EncodeToString(rawBytes)

	// 将十六进制字符串解码为字节数组
	decode, _ := hex.DecodeString(pubHex)

	// 转换为Base64格式
	base64Pub := base64.StdEncoding.EncodeToString(decode)
	return base64Pub
}

func main() {
	// 生成SM2密钥对
	_, publicKey, err := sm2.GenerateKey(rand.Reader)
	if err != nil {
		fmt.Println("生成密钥对失败:", err)
		return
	}

	// 将公钥转换为Base64格式
	base64Pub := PubToBase64(publicKey)
	fmt.Println("Base64格式的公钥:", base64Pub)
}
 

总结

通过上述步骤和代码,可以在Go语言中生成SM2密钥对,并计算和输出公钥值。如果需要将公钥用于其他系统或工具,可以将其转换为Base64格式
复制
分享
 
 
 
 
ANSI标准的头部3059301306072a8648ce3d020106082a811ccf5501822d03420004表示什么含义
 
 
 
搜索 ANSI 标准 头部 含义
在SM2证书中,ANSI标准头部3059301306072a8648ce3d020106082a811ccf5501822d03420004是一个用于标识公钥格式和算法的固定前缀,它遵循DER(Distinguished Encoding Rules)编码规则,用于描述公钥的结构和算法信息
以下是这个头部的详细解析

1. 30

  • 含义:SEQUENCE标签,表示这是一个序列结构,用于封装多个数据元素。
  • 用途:表示SubjectPublicKeyInfo结构的开始。

2. 59

  • 含义:长度字段,表示后续数据的长度为59字节。

3. 3013

  • 含义:SEQUENCE标签,表示AlgorithmIdentifier结构的开始。
  • 13:长度字段,表示后续数据的长度为19字节。

4. 06072a8648ce3d0201

  • 含义:OID(Object Identifier)标签,表示算法标识符。
  • 2a8648ce3d0201:OID值1.2.840.10045.2.1,表示ecPublicKey(椭圆曲线公钥)。

5. 06082a811ccf5501822d

  • 含义:OID标签,表示椭圆曲线参数。
  • 2a811ccf5501822d:OID值1.2.840.10045.3.1.7,表示使用的椭圆曲线为Secp256r1(国密SM2使用的曲线)。

6. 03420004

  • 03:STRING标签,表示公钥的主体部分。
  • 42:长度字段,表示后续数据的长度为66字节。
  • 00:填充字节,表示没有填充。
  • 04:表示公钥的无压缩格式,后面紧跟公钥的X和Y坐标值。

总结

这个头部3059301306072a8648ce3d020106082a811ccf5501822d03420004的作用是:
  1. 标识这是一个椭圆曲线公钥(ecPublicKey)。
  2. 指定使用的椭圆曲线为Secp256r1(国密SM2曲线)。
  3. 表示公钥的主体部分以无压缩格式存储
这种格式的头部是DER编码的一部分,广泛用于X.509证书中,以确保公钥的格式和算法信息能够被正确解析和识别
复制
分享
 
 
 
 
扩展信息: 2.5.29.15: 030205a0 2.5.29.37: 300a06082b06010505070302 2.5.29.35: 3016801445cceda694d0076f58c92966637ea257c0516b4f 表示什么含义
 
Avatar
这些扩展信息是X.509证书中的X509v3扩展字段,用于提供证书的附加属性和功能。每个扩展字段由一个OID(Object Identifier)和相应的值组成。以下是对这些扩展字段的详细解析:

1. 扩展字段:2.5.29.15

  • OID:2.5.29.15
  • 名称:X509v3 Key Usage
  • 值:030205a0
  • 含义:
    • 03:表示这是一个BIT STRING(位串)。
    • 02:表示值的长度为2字节。
    • 05a0:表示具体的位串值。
    • 解析位串值:
      • 05a0的二进制表示为00000110
      • 从右到左解析位:
        • 第1位:Digital Signature(数字签名):启用(1)
        • 第2位:Non Repudiation(不可否认性):启用(1)
        • 第3位:Key Encipherment(密钥加密):未启用(0)
        • 第4位:Data Encipherment(数据加密):未启用(0)
        • 第5位:Key Agreement(密钥协商):未启用(0)
        • 第6位:Key Cert Sign(证书签名):未启用(0)
        • 第7位:CRL Sign(CRL签名):未启用(0)
        • 第8位:Encipher Only(仅加密):未启用(0)
        • 第9位:Decipher Only(仅解密):未启用(0)
  • 总结:该证书的Key Usage扩展字段表明,该证书的公钥仅用于数字签名和不可否认性操作,不用于密钥加密、数据加密、密钥协商、证书签名或CRL签名。

2. 扩展字段:2.5.29.37

  • OID:2.5.29.37
  • 名称:X509v3 Extended Key Usage
  • 值:300a06082b06010505070302
  • 含义:
    • 30:表示这是一个SEQUENCE(序列)。
    • 0a:表示序列的长度为10字节。
    • 0608:表示OID的标签和长度。
    • 2b06010505070302:表示具体的OID值1.3.6.1.5.5.7.3.2
    • OID 1.3.6.1.5.5.7.3.2的含义是TLS Web Client Authentication(TLS Web客户端身份验证)。
  • 总结:该证书的Extended Key Usage扩展字段表明,该证书可用于TLS Web客户端身份验证。这意味着证书可用于客户端在TLS握手过程中向服务器证明其身份。

3. 扩展字段:2.5.29.35

  • OID:2.5.29.35
  • 名称:X509v3 Authority Key Identifier
  • 值:3016801445cceda694d0076f58c92966637ea257c0516b4f
  • 含义:
    • 30:表示这是一个SEQUENCE(序列)。
    • 16:表示序列的长度为22字节。
    • 80:表示一个上下文特定的标签(AuthorityKeyIdentifier)。
    • 14:表示值的长度为20字节。
    • 45cceda694d0076f58c92966637ea257c0516b4f:表示具体的值,这是一个160位的哈希值,用于标识颁发者的公钥。
  • 总结:该证书的Authority Key Identifier扩展字段用于标识颁发者的公钥。它通常是一个哈希值,用于确保证书的颁发者身份可以被正确识别和验证。

总结

这些扩展字段提供了证书的附加功能和属性:
  1. Key Usage:限制了证书公钥的用途,仅用于数字签名和不可否认性。
  2. Extended Key Usage:扩展了证书的用途,允许用于TLS Web客户端身份验证。
  3. Authority Key Identifier:标识了颁发者的公钥,用于验证证书的颁发者身份。
这些扩展字段在证书的使用和验证过程中非常重要,确保证书在正确的场景下被正确使用。
posted @ 2025-04-29 18:38  牧之丨  阅读(4)  评论(0)    收藏  举报