数字证书的格式一般采用X.509国际标准。目前,数字证书认证中心主要签发安全电子邮件证书、个人和企业身份证书、服务器证书以及代码签名证书等几种类型证书。数字证书的格式遵循ITUTX.509国际标准。
证书结构
证书结构 |
基本证书域(TBSCertificate) |
签名算法域(signatureAlgorithm) |
|
签名值域(signatureValue) |
1. 基本证书域
1.1 基本证书域结构
名称 |
描述 |
说明 |
version | 版本号 | |
serialNumber | 序列号 | |
signature | 签名算法 | |
issuer | 颁发者 | |
validity | 有效日期 | |
subject | 主体 | |
subjectPublicKeyInfo | 主体公钥信息 | |
issuerUniqueID | 颁发者唯一标识符 | 本标准中不使用 |
subjectUniqueID | 主体唯一标识符 | 本标准中不使用 |
extensions | 扩展项 | 按本标准的扩展项进行定义 |
1.2 标准的扩展域结构
名称 |
描述 |
关键度 |
authorityKeyIdentifier | 机构密钥标识符 | 非关键 |
subjectKeyIdentifier | 主体密钥标识符 | 非关键 |
keyUsage | 密钥用法 | 双证书标记为关键,单证书标记为非关键 |
extKeyUsage | 扩展密钥用途 | 如果密钥的用法只限于所指示的用途时标记为关键,否则标记为非关键 |
privateKeyUsagePeriod | 私有密钥使用期 | 非关键 |
certificatePolicies | 证书策略 | 非关键 |
policyMappings | 策略映射 | 如果证书用户需要正确解释发布的CA设定的规则时标识为关键,否则标识为非关键 |
subjectAltName | 主体替换名称 | 非关键 |
issuerAltName | 颁发者替换名称 | 非关键 |
subjectDirectoryAttributes | 主体目录属性 | 非关键 |
basicConstraints | 基本限制 | CA证书标记为关键,终端实体证书标记为非关键 |
nameConstraints | 名称限制 | 如果证书用户系统应检验所处理的认证路径与此扩展中的值是否一致时标记为关键,否则标记为非关键 |
policyConstraints | 策略限制 | 如果证书用户需要正确地解释认证机构CA设定的规则时标识为关键,否则标识为非关键 |
CRLDistributionPoints | CRL分发点 | 非关键 |
inhibitAnyPolicy | 限制所有策略 | 如果证书用户需要正确地解释认证机构CA设定的规则时标识为关键,否则标识为非关键 |
freshestCRL | 最新的CRL | 非关键 |
id-pkix | 私有的 Internet 扩展 | 非关键 |
authorityInfoAccess | 机构信息访问 | 非关键 |
SubjectInformationAccess | 主体信息访问 | 非关键 |
IdentifyCardNumber | 个人身份证号码 | 非关键 |
InuranceNumber | 个人社会保险号 | 非关键 |
ICRegistrationNumber | 企业工商注册号 | 非关键 |
OrganizationCode | 企业组织机构代码 | 非关键 |
TaxationNumber | 企业税号 | 非关键 |
1.3 X.509证书的结构
1.3.1 X.509证书基本部分
版本号:标识证书的版本(版本1、版本2或是版本3)
序列号:标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符。
签名: 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密。
颁发者:证书颁发者的可识别名(DN)
有效期:证书有效期的时间段。本字段由“Not Before”和“Not After”两项组成,它们分别由UTC时间或一般的时间表示(在RFC2459中有详细的时间表示规则)。
主体: 证书拥有者的可识别名,这个字段必须是非空的,除非你在证书扩展中有别名。
主体公钥信息:主体的公钥(以及算法标识符)
颁发者唯一标识符:标识符——证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
主体唯一标识符: 证书拥有者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
1.3.2 X.509扩展部分
可选的标准和专用的扩展(仅在版本2和版本3中使用),扩展部分的元素都有这样的结构:
ExtensiExtension ::= SEQUENCE {
exextnID OBJECT IDENTIFIER,
crcritical BOOLEAN DEFAULT FALSE,
exextnValue OCTET STRING }
extnID:表示一个扩展元素的OID
critical:表示这个扩展元素是否极重要
extnValue:表示这个扩展元素的值,字符串类型
发行者密钥标识符:证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥。
密钥使用:一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。如果某一证书将KeyUsage扩展标记为“极重要”,而且设置为“KeyCertSign”,则在SSL通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于SSL。
CRL分布点:指明CRL的分布地点。
私钥的使用期:指明证书中与公钥想联系的私钥的使用期限,它也有Not Before和Not After组成。若此项不存在时,公私钥的使用期是一样的。
证书策略:由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。
策略映射:表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在。
主体别名:指出证书所拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。
颁发者别名:指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。
主体目录属性:出证书拥有者的一系列属性。可以使用这一项来传递访问控制信息。
颁发机构信息(AIA):里面包含CA Ussuers -URI:http:// 以及OCSP – URI:http:// ,CA Issuers是当前证书上一级CA证书下载地址,可能是根CA证书,也可能是根中间CA证书。这就为溯源当前证书链提供方式。OCSP是在线证书状态协议,用于获取符合X.509标准的数字证书的状态。当用户试图访问一个服务器时,在线证书状态协议发送一个对于证书状态信息的请求。服务器回复一个“有效”、“过期”或“未知”的响应。
1、Alice和Bob使用GDCA颁发的数字证书。该场景中GDCA是数字证书认证中心CA机构;
2、Alice向Bob发送其由GDCA颁发的数字证书,并发出请求建立连接的申请;
3、Bob担心Alice的私钥已经泄露,因此向GDCA发送’OCSP request’ 消息并包含Alice的数字证书序列号;
4、GDCA的OCSP响应端从Bob发送的消息中获取数字证书的序列号,并在CA数据库中查找该数字证书的状态;
5、GDCA向Bob发送由其私钥加密的消息’OCSP response’,并包含证书状态正常的信息;
6、由于Bob事先已经安装了GDCA的数字证书,因此Bob使用Ivan的公钥解密消息并获取到Alice的数字证书状态信息;
7、Bob决定与Alice进行通信
验证证书有效
验证证书有效,目前方法就是逐层验证,把根CA和中间CA和当前证书结合起来验证。
因为证书中包含一个AIA字段,它有一个URL提供中间CA的下载,然后中间CA的AIA提供根CA证书的下载,这就收集齐证书链。然后使用python的verify_certificate()来验证证书是否有效。
一般自颁发证书不包含AIA字段,也就是不提供证书链供验证,而由CA颁发证书一般都提供验证链。一种简单快速的方法是验证当前证书是否包含AIA字段,当然根CA需要人工看,但这种方式可保证在微小误差下快速验证证书有效性。
从windows10中批量导出证书
以“颁发给”为名字导出证书
这样可以导出大部分正确命名的,不过也有少数错误。
Get-ChildItem -Path Cert:\LocalMachine\Root\ | ForEach-Object {Export-Certificate -Cert $_ -FilePath ($env:USERPROFILE + “\Desktop\root\” + $_.Subject.substring($_.Subject.indexof(“CN”)+3,$_.Subject.indexof(“,”)-3).Replace(“=”,””) + “.cer”)}
以哈希值导出证书
Get-ChildItem -Path Cert:\LocalMachine\Root\ |ForEach-Object {Export-Certificate -Cert $_ -FilePath ($env:USERPROFILE + “\Desktop\新建文件夹\ROOT\” + $_.Thumbprint + “.cer”)}
在线获取最新根CA
https://ccadb-public.secure.force.com/microsoft/IncludedCACertificateReportForMSFT