1 介绍
公开密钥认证(英语:Public key certificate),又称公开密钥证书、公钥证书、数字证书(digital certificate)、数字认证、身份证书(identity certificate)、电子证书或安全证书,是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。
此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。
拥有者凭着此文件,可向计算机系统或其他用户表明身份,从而对方获得信任并授权访问或使用某些敏感的计算机服务。计算机系统或其他用户可以透过一定的程序核实证书上的内容,包括证书有否过期、数字签名是否有效,如果你信任签发的机构,就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。
2 证书类型
主要的数字证书类型有两类,一类是终端/叶子证书 (End-entity or leaf certificate),一类是CA证书(CA certificate)。
终端证书由CA证书签发的。根证书(Root CA certificate),中介证书(Intermediate CA certificate)都算是CA证书。
CA证书本身可以按以下类型进行分类:
- 自行颁发的证书(Self-issued certificate),这是CA证书,其中颁发者和主题是相同的CA。可以用于在密钥翻转操作期间提供来自旧证书到新密钥的信任。
- 自签名证书(Self-signed certificate),这是自行颁发证书的特殊情况,其中私钥使用CA签署证书对应于CA证书中认证的公钥。可以用于可能会使用自签名证书来宣传他们的公钥或其他有关他们的信息操作。
- 交叉证书(Cross-certificate),这是CA证书,其中颁发者和主题是不同的CA.
CA颁发证书给其他CA作为授权主体CA存在的机制(例如,严格的(等级)或识别主题CA的存在(例如,在分布式信任模型中)。该交叉证书结构用于这两者。
3 证书的结构
业界现行的公钥证书格式标准是X.509。X.509是用ASN.1(一种标准的语言)来进行描述,现在已经到X.509 v3版本。
3.1 基本的证书字段(Basic Certificate Fields)
证书的数据结构如下:
Certificate ::= SEQUENCE{
tbsCertificate TBSCertificate, – 证书主体
signatureAlgorithm AlgorithmIdentifier, – 证书签名算法标识
signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.}
将证书进一步展开,数据结构如下:
TBSCertificate 字段 | 描述 |
---|---|
version 版本号 | 指出该证书使用了哪种版本的X.509标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息 |
serialNumber 序列号 | 标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符 |
signature 签名算法标识符 | 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1-RSA |
issuer 颁发者名称 | 证书颁发者的可识别名(DN),是签发该证书的实体唯一的CA的X.500名字 |
validity 有效期限 | 证书起始日期和时间以及终止日期和时间 |
subject 主体名 | 证书持有人的唯一标识符(或称DN-distinguished name) |
subjectPublicKeyInfo 公钥信息 | 包括证书持有人的公钥、算法 |
issuerUniqueID 颁发者唯一标识符 | 标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项 |
subjectUniqueID 主体唯一标识符 | 标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项 |
extensions 扩展信息 | 证书扩展段,只在证书版本3中才有 |
以上结构除了extensions部分,其余部分构成基本的证书字段(Basic Certificate Fields)。而证书的扩展字段(Certificate Extensions Fields)。
3.2 证书的扩展字段(Certificate Extensions Fields)
Extensions部分的结构都是固定为三部分:
extnID:表示一个扩展元素的OID。
critical:表示这个扩展元素是否极重要,如果重要为TRUE,非重要则为FALSE。
extnValue:表示这个扩展元素的值,字符串类型。
常见的扩展部分如下:
Extensions | extnID/OID | critical | extnValue |
---|---|---|---|
Authority Key Identifier 授权密钥标识符:它标识用于验证此证书或CRL上的签名的公钥。它使得能够区分由相同CA使用的不同密钥(例如,当发生密钥更新时)。 |
2.5.29.35 | FALSE | 详见RF5280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Subject Key Identifier 主体密钥标识符:它使得能够区分相同主题使用的不同密钥(例如,当发生密钥更新时)。 |
2.5.29.14 | FALSE | 详见RF5280 Internet X.510 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Key Usage 密钥使用:一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。 |
2.5.29.15 | DEFAULT FALSE FALSE/TRUE |
详见RF5280 Internet X.511 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Certificate Policies 证书策略:由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。 |
2.5.29.32 | FALSE | 详见RF5280 Internet X.512 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Policy Mappings 策略映射:表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在 。 |
2.5.29.33 | TRUE | 详见RF5280 Internet X.513 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Subject Alternative Name 主体别名:指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。 |
2.5.29.17 | DEFAULT FALSE FALSE/TRUE |
详见RF5280 Internet X.514 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Issuer Alternative Name 颁发者别名:指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。 |
2.5.29.18 | FALSE | 详见RF5280 Internet X.515 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile |
Subject Directory Attributes 主体目录属性:指出证书拥有者的一系列属性。可以使用这一项来传递访问控 |