PKI系统与数字证书结构

在上一篇《数字证书的基础知识》中介绍了数字证书的一些基础知识以及数字证书的作用,但是并没有提到数字证书的管理,比如数字证书的申请,数字证书的文件格式等知识。这里为大家整理和总结这些相关知识点。

PKI(Public Key Infrastructure)翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。

PKI既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为PKI。

PKI的组成

PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由一下几个组件组成:

  1. 认证中心CA(证书签发):CA机构,又称为证书授证 (Certificate Authority) 中心,是PKI的”核心”,即数字证书的申请及签发机关,CA必须具备权威性的特征,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA还要负责用户证书的黑名单登记和黑名单发布。
  2. X.500目录服务器(证书保存):X.500目录服务器用于”发布”用户的证书和黑名单信息,用户可通过标准的LDAP协议查询自己或其他人的证书和下载黑名单信息。
  3. 具有高强度密码算法(SSL)的安全WWW服务器(即配置了HTTPS的apache):Secure socket layer(SSL)协议最初由Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。
  4. Web(安全通信平台):Web有Web Client端和Web Server端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。
  5. 自开发安全应用系统:自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。

CA机构

CA 机构,又称为证书授证 (Certificate Authority) 中心,是一个负责发放和管理数字证书的权威机构 , 它作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。 CA 中心为每个使用公开密钥的用户发放一个数字证书,以实现公钥的分发并证明其合法性。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件 , 作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。 CA 机构的数字签名使得攻击者不能伪造和篡改证书。在 SET 交易中, CA 不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。认证中心CA作为PKI的核心部分,CA实现了PKI 中一些很重要的功能:

  1. 接收验证最终用户数字证书的申请
  2. 确定是否接受最终用户数字证书的申请-证书的审批
  3. 向申请者颁发、拒绝颁发数字证书-证书的发放
  4. 接收、处理最终用户的数字证书更新请求-证书的更新
  5. 接收最终用户数字证书的查询、撤销
  6. 产生和发布证书废止列表(CRL)
  7. 数字证书的归档
  8. 密钥归档
  9. 历史数据归档

X.509标准

X.509是一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准;因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。在一份证书中,必须证明公钥及其所有者的姓名是一致的。对X.509证书来说,认证者总是 CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据。

  • 版本号:指出该证书使用了哪种版本的X.509标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息,目前的版本为3
  • 序列号: 标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符
  • 签名算法标识符: 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密
  • 认证机构的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过
  • 认证机构: 证书颁发者的可识别名(DN),是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
  • 有效期限: 证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效
  • 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的
  • 公钥信息: 包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数
  • 颁发者唯一标识符:标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项

X.509证书扩展部分

可选的标准和专用的扩展(仅在版本2和版本3中使用),扩展部分的元素都有这样的结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
  Extension ::= SEQUENCE {
  extnID OBJECT IDENTIFIER,
  critical BOOLEAN DEFAULT FALSE,
  extnValue OCTET STRING }
  extnID:表示一个扩展元素的OID
  critical:表示这个扩展元素是否极重要
  extnValue:表示这个扩展元素的值,字符串类型。

扩展部分包括:

  • 发行者密钥标识符:证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥。
  • 密钥使用:一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于 SSL。
  • CRL分布点:指明CRL的分布地点
  • 私钥的使用期:指明证书中与公钥相联系的私钥的使用期限,它也有Not Before和Not After组成。若此项不存在时,公私钥的使用期是一样的。
  • 证书策略:由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。
  • 策略映射:表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在
  • 主体别名:指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。
  • 颁发者别名:指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。
  • 主体目录属性:指出证书拥有者的一系列属性。可以使用这一项来传递访问控制信息。

百度的SSL数字证书:

百度的SSL数字证书

数字证书格式

数字证书体现为一个或一系列相关经过加密的数据文件。常见格式有:

  • 符合PKI ITU-T X509标准,传统标准(.DER .PEM .CER .CRT)
  • 符合PKCS#7 加密消息语法标准(.P7B .P7C .SPC .P7R)
  • 符合PKCS#10 证书请求标准(.p10)
  • 符合PKCS#12 个人信息交换标准(.pfx *.p12)

当然,这只是常用的几种标准,其中,X509证书还分两种编码形式:

  • X.509 DER(Distinguished Encoding Rules)编码,后缀为:.DER .CER .CRT
  • X.509 BASE64编码,后缀为:.PEM .CER .CRT

X509是数字证书的基本规范,而P7和P12则是两个实现规范,P7用于数字信封,P12则是带有私钥的证书实现规范。采用的标准不同,生成的数字证书,包含内容也可能不同。下面就证书包含/可能包含的内容做个汇总,一般证书特性有:

  • 存储格式:二进制还是ASCII
  • 是否包含公钥、私钥
  • 包含一个还是多个证书
  • 是否支持密码保护(针对当前证书)

其中:

  • DER、CER、CRT以二进制形式存放证书,只有公钥,不包含私钥
  • CSR证书请求
  • PEM以Base64编码形式存放证书,以”—–BEGIN CERTIFICATE—–” 和 “—–END CERTIFICATE—–”封装,只有公钥
  • PFX、P12也是以二进制形式存放证书,包含公钥、私钥,包含保护密码。PFX和P12存储格式完全相同只是扩展名不同
  • P10证书请求
  • P7R是CA对证书请求回复,一般做数字信封
  • P7B/P7C证书链,可包含一个或多个证书

理解关键点:凡是包含私钥的,一律必须添加密码保护(加密私钥),因为按照习惯,公钥是可以公开的,私钥必须保护,所以明码证书以及未加保护的证书都不可能包含私钥,只有公钥,不用加密。

上文描述中,DER均表示证书且有签名,实际使用中,还有DER编码的私钥不用签名,实际上只是个“中间件”。另外:证书请求一般采用CSR扩展名,但是其格式有可能是PEM也可能是DER格式,但都代表证书请求,只有经过CA签发后才能得到真正的证书。

参考资料

数字证书的基础知识
X.509标准
X.509 数字证书结构简介
数字证书及CA的扫盲介绍
openSSL命令、PKI、CA、SSL证书原理