PKI和X509证书

PKI 体系

按照 X.509 规范,公钥可以通过证书机制来进行保护,但证书的生成、分发、撤销等步骤并未涉及。

实际上,要实现安全地管理、分发证书需要遵循 PKI(Public Key Infrastructure)体系。该体系解决了证书生命周期相关的认证和管理问题。

需要注意,PKI 是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架,并不代表某个特定的密码学技术和流程。实现了 PKI 规范的平台可以安全可靠地管理网络中用户的密钥和证书。目前包括多个具体实现和规范,知名的有 RSA 公司的 PKCS(Public Key Cryptography Standards)标准和 OpenSSL 等开源工具。
PKI 基本组件
一般情况下,PKI 至少包括如下核心组件:

  • CA(Certification Authority):负责证书的颁发和吊销(Revoke),接收来自 RA 的请求,是最核心的部分;
  • RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA;
  • 证书数据库:存放证书,多采用 X.500 系列标准格式。可以配合LDAP 目录服务管理用户信息。

其中,CA 是最核心的组件,主要完成对证书信息的维护。

常见的操作流程为,用户通过 RA 登记申请证书,提供身份和认证信息等;CA 审核后完成证书的制造,颁发给用户。用户如果需要撤销证书则需要再次向 CA 发出申请。

证书的签发

CA 对用户签发证书实际上是对某个用户公钥,使用 CA 的私钥对其进行签名。这样任何人都可以用 CA 的公钥对该证书进行合法性验证。验证成功则认可该证书中所提供的用户公钥内容,实现用户公钥的安全分发。

用户证书的签发可以有两种方式。可以由用户自己生成公钥和私钥,然后 CA 来对公钥内容进行签名(只有用户持有私钥);也可以由 CA 直接来生成证书(内含公钥)和对应的私钥发给用户(用户和 CA 均持有私钥)。

前者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即 csr 文件),该文件中包括了用户对应的公钥和一些基本信息,如通用名(common name,即 cn)、组织信息、地理位置等。CA 只需要对证书请求文件进行签名,生成证书文件,颁发给用户即可。整个过程中,用户可以保持私钥信息的私密性,不会被其他方获知(包括 CA 方)。

需要注意,用户自行生成私钥情况下,私钥文件一旦丢失,CA 方由于不持有私钥信息,无法进行恢复,意味着通过该证书中公钥加密的内容将无法被解密。

证书的吊销

证书超出有效期后会作废,用户也可以主动向 CA 申请吊销某证书文件。

由于 CA 无法强制收回已经颁发出去的数字证书,因此为了实现证书的作废,往往还需要维护一个吊销证书列表(Certificate Revocation List,CRL),用于记录已经吊销的证书序号。

因此,通常情况下,当对某个证书进行验证时,需要首先检查该证书是否已经记录在列表中。如果存在,则该证书无法通过验证。如果不在,则继续进行后续的证书验证过程。

为了方便同步吊销列表信息,IETF 提出了在线证书状态协议(Online Certificate Status Protocol,或 OCSP),支持该协议的服务可以实时在线查询吊销的证书列表信息。

数字证书

对于非对称加密算法和数字签名来说,很重要的步骤就是公钥的分发。理论上任何人都可以获取到公开的公钥。然而这个公钥文件有没有可能是伪造的呢?传输过程中有没有可能被篡改呢?一旦公钥自身出了问题,则整个建立在其上的的安全性将不复成立。

数字证书机制正是为了解决这个问题,它就像日常生活中的证书一样,可以确保所记录信息的合法性。比如证明某个公钥是某个实体(个人或组织)拥有,并且确保任何篡改都能被检测出来,从而实现对用户公钥的安全分发。

根据所保护公钥的用途,数字证书可以分为加密数字证书(Encryption Certificate)和签名验证数字证书(Signature Certificate)。前者往往用于保护用于加密用途的公钥;后者则保护用于签名用途的公钥。两种类型的公钥也可以同时放在同一证书中。

一般情况下,证书需要由证书认证机构(CA)来进行签发和背书。权威的商业证书认证机构包括 DigiCert、GlobalSign、VeriSign 等。用户也可以自行搭建本地 CA 系统,在私有网络中进行使用。

X.509 证书规范

一般的,一个数字证书内容可能包括证书域(证书的版本、序列号、签名算法类型、签发者信息、有效期、被签发主体、签发的公开密钥)、CA 对证书的签名算法和签名值等。
目前使用最广泛的标准为 ITU 和 ISO 联合制定的 X.509 的 v3 版本规范(RFC 5280),其中定义了如下证书信息域:
• 版本号(Version Number):规范的版本号,目前为版本 3,值为 0x2;
• 序列号(Serial Number):由 CA 维护的为它所颁发的每个证书分配的唯一的序列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书。最大不能超过 20 个字节;
• 签名算法(Signature Algorithm):数字签名所采用的算法,如 sha256WithRSAEncryption 或 ecdsa-with-SHA256;
• 颁发者(Issuer):颁发证书单位的信息,如 “C=CN, ST=Beijing, L=Beijing, O=org.example.com, CN=ca.org.example.com”;
• 有效期(Validity):证书的有效期限,包括起止时间(如 Not Before 2018-08-08-00-00UTC,Not After 2028-08-08-00-00UTC);
• 被签发主体(Subject):证书拥有者的标识信息(Distinguished Name),如 “C=CN, ST=Beijing, L=Beijing, CN=personA.org.example.com”;
• 主体的公钥信息(Subject Public Key Info):所保护的公钥相关的信息;

  • 公钥算法(Public Key Algorithm):公钥采用的算法;
  • 主体公钥(Subject Public Key):公钥的内容;

• 颁发者唯一号(Issuer Unique Identifier,可选):代表颁发者的唯一信息,仅 2、3 版本支持,可选;
• 主体唯一号(Subject Unique Identifier,可选):代表拥有证书实体的唯一信息,仅 2、3 版本支持,可选;
• 扩展(Extensions,可选):可选的一些扩展。可能包括:

  • Subject Key Identifier:实体的密钥标识符,区分实体的多对密钥;
  • Basic Constraints:一般指明该证书是否属于某个 CA;
  • Authority Key Identifier:颁发这个证书的颁发者的公钥标识符;
  • Authority Information Access:颁发相关的服务地址,如颁发者证书获取地址和吊销证书列表信息查询地址;
  • CRL Distribution Points:证书注销列表的发布地址;
  • Key Usage: 表明证书的用途或功能信息,如 Digital Signature、Key CertSign;
  • Subject Alternative Name:证书身份实体的别名,如该证书可以同样代表 .org.example.com,org.example.com,.example.com,example.com 身份等。
    此外,证书的颁发者还需要对证书内容利用自己的私钥进行签名,以防止他人篡改证书内容。

证书信任链

证书中记录了大量信息,其中最重要的包括“签发的公开密钥”和“CA数字签名”两个信息。因此,只要使用 CA 的公钥再次对这个证书进行签名比对,就能证明所记录的公钥是否合法。

读者可能会想到,怎么证明用来验证对实体证书进行签名的CA公钥自身是否合法呢?毕竟在获取CA公钥的过程中,它也可能被篡改掉。

实际上,CA 的公钥是否合法,一方面可以通过更上层的CA颁发的证书来进行认证;另一方面某些根 CA(Root CA)可以通过预先分发证书来实现信任基础。例如,主流操作系统和浏览器里面,往往会提前预置一些权威 CA 的证书(通过自身的私钥签名,系统承认这些是合法的证书)。之后所有基于这些 CA 认证过的中间层 CA(Intermediate CA)和后继 CA 都会被验证合法。这样就从预先信任的根证书,经过中间层证书,到最底下的实体证书,构成一条完整的证书信任链。

某些时候用户在使用浏览器访问某些网站时,可能会被提示是否信任对方的证书。这说明该网站证书无法被当前系统中的证书信任链进行验证,需要进行额外检查。另外,当信任链上任一证书不可靠时,则依赖它的所有后继证书都将失去保障。

可见,证书作为公钥信任的基础,对其生命周期进行安全管理十分关键。后面章节将介绍的 PKI 体系提供了一套完整的证书管理的框架,包括生成、颁发、撤销过程等。

证书的申请和撤销

证书的申请有两种方式,一是在线申请,另外一个就是离线申请。在线申请就是通过浏览器或其他应用系统通过在线的方式来申请证书,这种方式一般用于申请普通用户证书或测试证书。离线方式一般通过人工的方式直接到证书机构证书受理点去办理证书申请手续,通过审核后获取证书,这种方式一般用于比较重要的场合,如服务器证书和商家证书等。下面讨论的主要是在线申请方式。

当证书申请时,用户使用浏览器通过Internet访问安全服务器,下载CA的数字证书(又叫做根证书),然后注册机构服务器对用户进行身份审核,认可后便批准用户的证书申请,然后操作员对证书申请表进行数字签名,并将申请及其签名一起提交给CA服务器。

CA 操作员获得注册机构服务器操作员签发的证书申请,发行证书或者拒绝发行证书,然后将证书通过硬拷贝的方式传输给注册机构服务器。注册机构服务器得到用户的证书以后将用户的一些公开信息和证书放到LDAP服务器上提供目录浏览服务,并且通过电子邮件的方式通知用户从安全服务器上下载证书。用户根据邮件的提示到指定的网址下载自己的数字证书,而其他用户可以通过LDAP服务器获得他的公钥数字证书。

证书申请的步骤如下:

1)用户申请
用户首先下载CA的证书,又叫根证书,然后在证书的申请过程中使用SSL安全方式与服务器建立连接,用户填写个人信息,浏览器生成私钥和公钥对,将私钥保存客户端特定文件中,并且要求用口令保护私钥,同时将公钥和个人信息提交给安全服务器。安全服务器将用户的申请信息传送给注册机构服务器。

2)注册机构审核
用户与注册机构人员联系,证明自己的真实身份,或者请求代理人与注册机构联系。注册机构操作员利用自己的浏览器与注册机构服务器建立SSL安全通信,该服务器需要对操作员进行严格的身份认证,包括操作员的数字证书、IP地址,为了进一步保证安全性,可以设置固定的访问时间。操作员首先查看目前系统中的申请人员,从列表中找出相应的用户,点击用户名,核对用户信息,并且可以进行适当的修改,如果操作员同意用户申请证书请求,必须对证书申请信息进行数字签名。操作员也有权利拒绝用户的申请。操作员与服务器之间的所有通信都采用加密和签名,具有安全性、抗否认性,保证了系统的安全性和有效性。

3)CA发行证书
注册机构RA通过硬拷贝的方式向CA传输用户的证书申请与操作员的数字签名,CA操作员查看用户的详细信息,并且验证操作员的数字签名,如果签名验证通过,则同意用户的证书请求,颁发证书。然后CA将证书输出。如果CA操作员发现签名不正确,则拒绝证书申请,CA颁发的数字证书中包含关于用户及CA自身的各种信息,如:能唯一标识用户的姓名及其他标识信息,如个人的email地址;证书持有者的公钥。公钥用于为证书持有者加密敏感信息、签发个人证书的认证机构的名称、个人证书的序列号和个人证书的有效期(证书有效起止日期)等

4)注册机构证书转发
注册机构RA操作员从CA处得到新的证书,首先将证书输出到LDAP目录服务器以提供目录浏览服务,最后操作员向用户发送一封电子邮件,通知用户证书已经发行成功,并且把用户的证书序列号告诉用户到指定的网址去下载自己的数字证书。并且告诉用户如何使用安全服务器上的LDAP配置,让用户修改浏览器的客户端配置文件以便访问LDAP服务器,获得他人的数字证书。

5)用户证书获取
用户使用证书申请时的浏览器到指定的网址,键入自己的证书序列号,服务器要求用户必须使用申请证书时的浏览器,因为浏览器需要用该证书相应的私钥去验证数字证书。只有保存了相应私钥的浏览器才能成功下载用户的数字证书。
这时用户打开浏览器的安全属性,就可以发现自己已经拥有了CA颁发的数字证书,可以利用该数字证书与其他人以及web服务器(拥有相同CA颁发的证书)使用加密、数字签名进行安全通信。

认证中心还涉及到CRL的管理。用户向特定的操作员(仅负责CRL的管理)发一份加密签名的邮件,申明自己希望撤消证书。操作员打开邮件,填写CRL注册表,并且进行数字签名,提交给CA,CA操作员验证注册机构操作员的数字签名,批准用户撤消证书,并且更新CRL,然后CA将不同格式的CRL输出给注册 机构,公布到安全服务器上,这样其他人可以通过访问服务器得到CRL。

证书撤销流程步骤如下:
1)用户向注册机构操作员CRLManager发送一封签名加密的邮件,声明自己自愿撤消证书。
2)这册机构同意证书撤消,操作员键入用户的序列号,对请求进行数字签名。
3)CA查询证书撤消请求列表,选出其中的一个,验证操作员的数字签名,如果正确的话,则同意用户的证书撤消申请,同时更新CRL列表,然后将CRL以多种格式输出。
4)注册机构转发证书撤消列表。操作员导入CRL,以多种不同的格式将CRL公布于众。
5)用户浏览安全服务器,下载或浏览CRL。
在一个PKI,特别是CA中,信息的存储是一个非常核心的问题,它包括两个方面:一是CA服务器利用数据库来备份当前密钥和归档过期密钥,该数据库需高度安全和机密,其安全等级同CA本身相同;另外一个就是目录服务器,用于分发证书和CRL,一般采用LDAP目录服务器。

密钥管理

密钥管理也是PKI(主要指CA)中的一个核心问题,主要是指密钥对的安全管理,包括密钥产生、密钥备份、密钥恢复和密钥更新等。

1)密钥产生
密钥对的产生是证书申请过程中重要的一步,其中产生的私钥由用户保留,公钥和其他信息则交于CA中心进行签名,从而产生证书。根据证书类型和应用的不同,密钥对的产生也有不同的形式和方法。对普通证书和测试证书,一般由浏览器或固定的终端应用来产生,这样产生的密钥强度较小,不适合应用于比较重要的安全网络交易。而对于比较重要的证书,如商家证书和服务器证书等,密钥对一般由专用应用程序或CA中心直接产生,这样产生的密钥强度大,适合于重要的应用场合。
另外,根据密钥的应用不同,也可能会有不同的产生方式。比如签名密钥可能在客户端或RA中心产生,而加密密钥则需要在CA中心直接产生。

2)密钥备份和恢复
在一个PKI系统中,维护密钥对的备份至关重要,如果没有这种措施,当密钥丢失后,将意味着加密数据的完全丢失,对于一些重要数据,这将是灾难性的。所以,密钥的备份和恢复也是PKI密钥管理中的重要一环。

使用PKI的企业和组织必须恩能够得到确认:即使密钥丢失,受密要加密保护的重要信息也必须能够恢复,并且不能让一个独立的个人完全控制最重要的主密钥,否则将引起严重后果。

企业级的PKI产品至少应该支持用于加密的安全密钥的存储、备份和恢复。密钥一般用口令进行保护,而口令丢失则是管理员最常见的安全疏漏之一。所以,PKI产品应该能够备份密钥,即使口令丢失,它也能够让用户在一定条件下恢复该密钥,并设置新的口令。

例如,在某些情况下用户可能有多对密钥,至少应该有两个密钥:一个用于加密,一个用于签名。签名密要不需要备份,因为用于验证签名的公钥(或公钥证书)广泛发布,即使签名私钥丢失,任何用于相应公要的人都可以对已签名的文档进行验证。但PKI系统必须备份用于加密的密钥对,并允许用户进行恢复,否则,用于解密的私钥丢失将意味着加密数据的完全不可恢复。

另外,使用PKI的企业也应该考虑所使用密钥的生命周期,它包括密钥和证书的有效时间,以及已撤销密钥和证书的维护时间等。

3)密钥更新
对每一个由CA颁发的证书都会有有效期,密钥对生命周期的长短由签发证书的CA中心来确定,各CA系统的证书有效期限有所不同,一般大约为2-3年。
当用户的私钥被泄漏或证书的有效期快到时,用户应该更新私钥。这时用户可以废除证书,产生新的密钥对,申请新的证书。

证书的使用

在实际应用中,为了验证信息的数字签名,用户首先必须获取信息发送者的公钥证书,以及一些额外需要的证书(如CA证书等,用于验证发送者证书的有效性)。
证书的获取可以有多种方式,如发送者发送签名信息时附加发送自己的证书,或以另外的单独信息发送证书,或者可以通过访问证书发布的目录服务器来获得,或者直接从证书相关的实体处获得。在一个PKI体系中,可以采取某种或某几种上述方式获得证书。
在电子商务系统中,证书的持有者可以是个人用户、企事业单位、商家、银行等。无论是电子商务中的哪一方,在使用证书验证数据时,都遵循同样的验证流程。一个完整的验证过程有以下几步:

  1. 将客户端发来的数据解密 (如解开数字信封)。
  2. 将解密后的数据分解成原始数据,签名数据和客户证书三部分。
  3. 用CA根证书验证客户证书的签名完整性。
  4. 检查客户证书是否有效 (当前时间在证书结构中的所定义的有效期内)。
  5. 检查客户证书是否作废 (OCSP方式或CRL方式)。
  6. 验证客户证书结构中的证书用途。
  7. 客户证书验证原始数据的签名完整性。

如果以上各项均验证通过,则接受该数据。

参考:

RFC 2459 Internet X.509 Public Key Infrastructure

X.509证书结构简介及实例

PKI系统深入介绍

你可能感兴趣的:(security,计算机知识,PKI,X509,证书)