Go_crypto_x509标准库源码分析(1)_X509证书结构以及各个字段含义
X509证书
X509证书是CA颁发的一种数字证书标准
X.509证书、ASN.1以及DER编码格式的关系
ASN.1是一种标记语言,基于这种标记语言可以进行数据表示、编码、传输和解码
DER是一种属于ASN.1的编码格式
X.509证书是一种密码学中的公钥数字证书标准,规定了一个数字证书需要哪些信息,而这些信息的编码格式是可以采用ASN.1中的DER编码格式
X.509证书格式
X.509证书主要包含三个部分的信息:
- 证书的基本信息(TBSCertificate)
- 数字签名结果(Signature)
- 数字签名的算法类型(SignatureAlgorithm)
type certificate struct {
Raw asn1.RawContent
//证书的基本信息
TBSCertificate tbsCertificate
//CA签名数字证书的算法标识符
SignatureAlgorithm pkix.AlgorithmIdentifier
//根据TBSCertificate通过ASN1.DER编码后的数据用SignatureAlogrithm算法签名得出的数字签名
SignatureValue asn1.BitString
}
-
证书的基本信息
//证书的基本信息 type tbsCertificate struct { Raw asn1.RawContent //This field describes the version of the encoded certificate.(编码后的证书的版本号) Version int `asn1:"optional,explicit,default:0,tag:0"` //CA颁发的数字证书的序列号 SerialNumber *big.Int //CA用于签署证书的算法标识符 SignatureAlgorithm pkix.AlgorithmIdentifier //签署和颁发该证书的发行人标识符 Issuer asn1.RawValue //证书的有效期 Validity validity //数字证书中存放的信息主题 Subject asn1.RawValue PublicKey publicKeyInfo UniqueId asn1.BitString `asn1:"optional,tag:1"` SubjectUniqueId asn1.BitString `asn1:"optional,tag:2"` Extensions []pkix.Extension `asn1:"optional,explicit,tag:3"` }
生成X.509证书的过程
- 检查一个标准X.509证书需要的三个方面部分(证书的基本信息,签名算法,签名部分)
- 然后对X.509证书进行编码获得DER编码格式数据
- 然后用CA私钥对DER编码格式数据进行签名
- 最后生成X.509数字证书
SignatureAlogrithm常数定义
crypto/x509 x509.go
根据如上图所示当SignatureAlogrithm=10时,签名算法采用的是ECDSA(椭圆曲线数字签名算法)+底层哈希算法是SHA2-256.
- **crypto/x509支持的签名算法具体信息: in x509.go **
- crypto /x509支持的公钥生成算法结构体部分: in x509.go
当结构体PublicKeyAlgorithm=3时对应公钥生成算法是ECDSA
总结
-
在X509包中,对于数字证书的签名算法(ECDSAwithSHA256):ECDSA是用来生成公私钥对且用来数字签名过程,SHA256是用来数字签名过程中对消息计算哈希值
SignatureAlgorithm=10;PublicKeyAlgorithm=3;