了解X509证书

X509证书

X509即我们常说的数字证书,因其内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。

除了包含用户的基本信息,X509证书有其特定的结构,具体可看RFC标准5208

X509使用ASN.1进行描述,可以抽象为以下结构

Certificate::=SEQUENCE{
         tbsCertificate      TBSCertificate,
         signatureAlgorithm  AlgorithmIdentifier,
         signatureValue      BIT STRING
 
}
TBSCertificate::=SEQUENCE{
    version           [0]   EXPLICIT Version DEFAULT v1,
    serialNumber            CertificateSerialNumber,
    signature               AlgorithmIdentifier,
    issuer                  Name,
    validity                Validity,
    subject                 Name,
    subjectPublicKeyInfo    SubjectPublicKeyInfo,
    issuerUniqueID    [1]   IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID   [2]   IMPLICIT UniqueIdentifier OPTIONAL,
    extensions        [3]   EXPLICIT Extensions OPTIONAL
}

ASN.1语法可以类比为C语言中的结构体互相嵌套,其主体结构如下图所示

以下引用SM2证书标准《GMT 0015-2012 基于SM2密码算法的数字证书格式》的表述

数字证书具有以下特性:

——任何能够获得和使用认证机构公钥的用户都可以恢复认证机构所认证的公钥。

——除了认证机构,没有其他机构能够更改证书,证书是不可伪造的。

由于证书是不可伪造的,所以可以通过将其放置在目录中来发布,而不需要以后特意去保护它们。

注:尽管在DIT中使用唯一性名称来明确定义CA,但这并不意味着CA组织和DIT之间有 任何联系。

认证机构通过对信息集合的签名来生成用户证书,信息集合包括可辨别的用户名、公钥以及一个可选的包含用户附加信息的唯一性标识符(unique identifier))。唯一性标识符 内容的确切格式本章未做规定,而留给认证机构(CA)去定义 。唯一性标识符可以是诸如对象标识符、证书、日期或是说明有关可辨别用户名的有效性的证书的其他形式。具体地说,如果一个用户证书的可辨别名为A,唯一性标识符为UA,并且该证书是由名为CA,其唯一性标识符为 UCA的认证机构生成的,则用户证书具有下列的形式:

CA<≡(A>>=CA(V,SN,AI,CA,UCA,A,UA,Ap,TA}

这里 V为证书版本;SN为证书序列号;AI为用来签署证书的算法标识符;UCA为CA的 可选的唯一性标识符;UA为用户A的可选的唯一性标识符;Ap为用户A的公钥;TA表示证书的有效期,由两个日期组成,两者之间的时间段即是证书的有效期。证书有效期是一个时间区间,在这个时间区间里,CA必须保证维护该证书的状态信息,也就是发布有关撤销 的信息数据。由于假定TA在不小于24h的周期内变化 ,要求系统以格林威治时间(Coordinated Universal Tlme)为基准时间。证书上的签名可被任何知道 CA公钥CAp的用户用来验证证书的有效性。CRL是CA对撤销的证书而签发的一个列表文件,该文件可用于应用系统鉴别用户证书的有效性。CRL遵循X.509V2标准的证书撤销列表格式 。

 X509证书的解析其实就是对证书的ASN1格式进行解析,所以最原始的解析方式就是根据其确定的ASN1格式,对数据进行解析,但实际开发使用中,我们使用的接口都不会涉及到ASN1的解析,因为大多数框架已经帮我们进行实现,如OpenSSL,当然我们也要知晓这其中实现方式。

可以使用ASN.1解析工具查看证书的结构,在线解析工具,从中可以很清楚直观地看到证书的结构及数据信息

X509证书格式

Der:二进制格式,一般为.cer、.crt后缀,即基于ASN.1格式生成证书,保存形式即为二进制格式

Pem:文本格式,由于证书是具有流通性的,二进制格式不利于在文本上查看、复制等操作,故对证书的二进制格式进行Base64编码生成可视的文本格式,并施加“-----BEGIN CERTIFICATE-----”“-----END CERTIFICATE-----”头部和尾部

PFX:PKCS12定义的标准,将证书、私钥、CA证书链打包成一个安全文件,方便传输及使用,PFX证书不能直接查看,需要私钥的密码方可做进一步解析

P7B:PKCS7定义的标准,包含签名或加密信息,也会包含证书,故可从中解析除证书信息

SM证书

SM证书的结构和RFC5208标准是一致,但由于SM2证书签名使用的散列一般为SM3,签名算法为SM2,很多框架的证书解析的库没有支持SM3和SM2相关的算法实现,所以无法正常解析。之前介绍的使用Go的X509库就是无法正常解析,后续介绍的OpenSSL解析X509证书将支持SM2证书的解析。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值