请讲解下证书打印的内容
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语言中,可以通过使用
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的公钥由椭圆曲线上的一个点表示,通常以
X和Y坐标的形式存储。可以通过访问publicKey.X和publicKey.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表示什么含义
在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的作用是:-
标识这是一个椭圆曲线公钥(
ecPublicKey)。 -
指定使用的椭圆曲线为
Secp256r1(国密SM2曲线)。 -
表示公钥的主体部分以无压缩格式存储。
这种格式的头部是DER编码的一部分,广泛用于X.509证书中,以确保公钥的格式和算法信息能够被正确解析和识别。
扩展信息: 2.5.29.15: 030205a0 2.5.29.37: 300a06082b06010505070302 2.5.29.35: 3016801445cceda694d0076f58c92966637ea257c0516b4f 表示什么含义
这些扩展信息是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扩展字段用于标识颁发者的公钥。它通常是一个哈希值,用于确保证书的颁发者身份可以被正确识别和验证。
总结
这些扩展字段提供了证书的附加功能和属性:
-
Key Usage:限制了证书公钥的用途,仅用于数字签名和不可否认性。
-
Extended Key Usage:扩展了证书的用途,允许用于TLS Web客户端身份验证。
-
Authority Key Identifier:标识了颁发者的公钥,用于验证证书的颁发者身份。
这些扩展字段在证书的使用和验证过程中非常重要,确保证书在正确的场景下被正确使用。
浙公网安备 33010602011771号