公钥基本结构(PKI)的概念
术语公钥基本结构(PKI)用于描述管制或操纵证书与公钥及私钥的策略、标准和软件。实际上,PKI 是指由数字证书、证书颁发机构 (CA) 以及对电子交易所涉及各方的合法性进行检查和验证的其它注册机构组成的一套系统。PKI 的有关标准仍处于不断发展之中,即使这些标准已被作为电子商务的要素而广泛实施。
本节帮助您理解什么是 PKI 以及创建 PKI 需要哪些服务。这些 PKI 概念将在下面几个小节中讨论:
证书
公钥证书 ,通常简称为证书 ,用于在 Internet、Extranet 和 Intranet 上进行身份验证并确保数据交换的安全。证书的颁发者和签署者就是众所周知的 证书颁发机构 (CA),将在下一节中介绍。颁发证书的实体是证书的 主体 。
公钥证书是以数字方式签名的声明,它将公钥的值与持有相应私钥的主体(个人、设备和服务)的身份绑定在一起。通过在证书上签名,CA 可以核实与证书上公钥相应的私钥为证书所指定的主体所拥有。
可以为各种目的颁发证书,如 Web 用户身份验证、Web 服务器身份验证、使用安全/多用途 Internet 邮件扩充协议 (Secure/Multipurpose Internet Mail Extensions, S/MIME) 的安全电子邮件、IP 安全性 (IP Security)、安全套接字协议层/事务层安全性 (Secure Sockets Layer/Transaction Layer Security, SSL/TLS) 和代码签名。如果在一个组织内部使用 Windows 2000 企业证书颁发机构(在“Windows 2000 Certificate Services”白皮书中说明),证书可用于登录到 Windows 2000 域。证书还可以由一个 CA 颁发给另一个 CA,以建立证书层次结构。
可以通过多个名称来识别主体,如用户主要名称(用于最终用户证书)、目录名、电子邮件名称和 DNS 域名等。证书还应包含下列信息:
证书的有效期。
证书的序列号,CA 应保证该序列号是唯一的。
CA 的名称以及用于签署该证书的密钥。
CA 所遵循的用来确定证书主体身份的策略的标识符(稍后将详细介绍 CA 策略)。
在证书中标识的密钥对(公钥及相关的私钥)的用法。
证书吊销列表 (CRL) 的位置,这是一个由 CA 维护并发布的列出已被吊销的证书的文档。为确保其完整性,CRL 是用 CA 的私钥签署的。
证书提供了一个在公钥和拥有相应私钥的实体之间建立关系的机制。目前最常用的证书格式通过 ITU-T X.509 版本 3 (X.509v3) 国际标准定义。RFC 2459 是 X.509v3 的一个配置文件,进一步阐明了 X.509v3 中定义的字段。Windows 2000 PKI 采用 X.509v3 标准。Windows 证书是按照 RFC 2459 中的说明编程的,但仍然叫做 X.509v3 证书。(有关 ITU-T X.509 的详细信息,请参见“Windows 2000 证书服务”白皮书。)
ITU-T X.509 并非证书的唯一格式。例如,Pretty Good Privacy (PGP) 安全电子邮件依赖 PGP 所独有的一种证书。
证书颁发机构
证书颁发机构 (CA) 是一个向个人、计算机或任何其它申请实体颁发证书的可信实体。CA 受理证书申请,根据该 CA 的策略验证申请人的信息,然后使用它的私钥把其数字签名应用于证书。然后,CA 将该证书颁发给该证书的主体,作为 PKI 内部的安全凭据。由于不同的 CA 使用不同的方法验证公钥与主体之间的绑定,在选择信任该颁发机构之前,理解该 CA 的策略是非常重要的(稍后解释)。
CA 可以是远程的第三方机构,如 GeoTrust。作为选择,也可以是您创建的供您所在组织使用的 CA,例如,通过安装 Windows 2000 证书服务即可创建一个 CA。每个 CA 对证书申请人可能有完全不同的身份凭据要求,如 Windows 2000 域帐户、职员标记、驾驶执照、公证请求或实际住址。
CA 策略
CA 根据也已确立的一套标准向申请人颁发证书。CA 在受理证书请求(以及颁发证书、吊销证书和发布 CRL)时所采用的一套标准被称为CA 策略 。通常,CA 以一种叫做证书惯例声明 (Certification Practice Statement, CPS) 的文档发布其策略。
不应将 CA 策略与 Windows 2000 的术语“组策略”相混淆,后者通常与域帐户和应用程序部署服务(如 IntelliMirror)相关联。(关于 Windows 2000 中的 CA 策略以及组策略在 Windows 2000 PKI 中所扮演的角色的信息,请分别参见“Windows 2000 证书服务”白皮书中“Windows 2000 CA 策略”和“CA 证书分发”部分。)
证书颁发机构的类型
CA 的类型 5 包括以下三种:
自签名 CA 。 在自签名 CA 中,证书中的公钥和用于验证证书的密钥是相同的。一些自签名 CA 是根 CA。
从属 CA 。在从属 CA 中,证书中的公钥和用于核实证书的密钥是不同的。一个 CA 向另一个 CA 颁发证书的过程叫做 交叉认证 。
根 CA 。根 CA 是一种特殊的 CA,它受到客户无条件地信任,位于证书层次结构的最高层。所有证书链均终止于根 CA。根颁发机构必须对它自己的证书签名,因为在证书层次结构中再也没有更高的认证机构了。
所有自签名 CA 都是根 CA,因为到自签名 CA 时证书链就终止了。
Windows 2000 只能指定一个自签名 CA 为根 CA。将一个 CA 指定为根 CA 的决策由个人在企业级或本地做出。
不可更改的 CA 层次结构
管理员可以创建 CA 的层次结构,从根 CA 证书开始,然后添加中级 CA,每一个 CA 都可以为其从属 CA 颁发证书。当 CA 向最终实体(用户)颁发证书时,证书链就终止了。
根 CA 证书的分发费用最高,因为如果您开始改变根证书,就必须重建整个 PKI。如果根证书改变了,就必须吊销组织内所有客户端的旧的根证书,并添加新的根证书。另外,必须重新颁发由根 CA 颁发的、再由从属 CA 颁发给最终实体的所有证书。因此,在部署 CA 层次结构时,使用少量的长寿命根 CA 可提供最经济的解决方案。根 CA 非常重要-因为它们被无条件地信任,因为它们是证书链的顶点-因此,在分发证书时要有一个圈外的身份验证。也就是说,由于根 CA 是自签名的,所以必须有人来证明根证书是真品。
因为最终实体要比 CA 多得多,所以向最终实体颁发证书的 CA 使用私钥在大量的数据上签名。用来对数据签名的密钥使用得越频繁,加密数据受到攻击的可能性就越大。因此,为了保持安全,向最终实体颁发证书的联机 CA 必须经常更换其签名密钥。
向最终实体颁发证书的 CA 具有的吊销证书列表,要比中级或根 CA 的列表大得多(这些 CA 仅向其它 CA,更多的是从属 CA 颁发证书)。其部分原因是因为最终实体要比 CA 证书多得多。另外,有许多理由可以解释为什么必须吊销最终实体的证书,如职员改变了工作或离开了公司。
CA 发布吊销证书列表(CRL),其中列出了不应再使用的证书。被吊销证书的有关条目将一直保留在 CRL 列表中,直至证书的 有效期 结束之后,CA 才可将该证书从列表中删除。CRL 中的条目越多,CRL 就越大,其下载时间就越长。通常,只有使用较慢的网络链路(如拨号连接)的用户才会遇到下载时间问题。CA 还可以管理 CRL 列表的大小。一种方法是维护多个列表,称为分区 CRL。另一种方法是,缩短已颁发证书的有效期,从而加快 CA 从列表中删除吊销证书的速度。(关于 CRL 的详细信息,请参见“证书吊销”一节。)
许多应用程序必须能够查明证书最近的吊销状态信息。只有一个联机 CA 能够发布有关证书状态的当前信息。由脱机 CA 公布的吊销状态,必须使用圈外的方法发布到联机位置。
大多数容易受到攻击的 CA 都是处于联机状态的、物理安全措施较差并签署了大量证书的 CA。因此,建立根 CA 和从属 CA 时,应该平衡一下安全性和可用性。通常,建议采用三级层次结构,即一个脱机的独立根 CA、一个脱机的独立从属策略 CA 和一个联机从属颁发企业 CA。
脱机根 CA 。在设计 CA 的层次结构时,根 CA 的安全级别应设为最高。根 CA 应以脱机状态保存在安全的位置,并且用它只签署少量证书。可能的话,应该将 CA 和密钥保存在专门的保管库中,并且至少同时有两位操作员进入该保管库,一位执行规定的操作,另一位审核其操作。(在 Windows 2000 网络中,设计了独立的 CA,以便它们脱机运行。)
脱机中级 CA 。在一个根 CA 下面可以有一个或多个从属 CA。将中级从属 CA 设为脱机的机器,可以提高该 CA 的安全性。
联机颁发 CA 。CA 链中最后一级的 CA 必须处于联机状态,因此可用于受理来自众多客户机的证书申请。根 CA 下面的联机 CA 也可以经常发布最新的吊销状态信息。管理员可以频繁地更改这种 CA 的密钥,因为颁发新证书的开销(管理方面的开销)是最低的。从属 CA 并不完全是可任意使用的,但通过攻击从属 CA 并不能得到多少有价值的东西,而且高级 CA 通过吊销证书即可轻而易举地阻挡这种攻击。
注册
注册 就是主体向 CA 自我介绍的过程。在申请证书时,注册可以是隐含的,或通过为主体提供担保的另一个可信实体(如智能卡登记站)来完成,或者在收到来源可信(如来自域管理员)的信息时自动完成。一旦向 CA 进行了注册,只要符合按照 CA 策略建立的标准,证书即被颁发给该主体。
证书登记
证书登记 就是最终实体进行证书申请并从 CA 接收证书的过程。证书申请就是向 CA 提供身份信息,该信息随后将成为所颁发证书的一部分。CA 根据一套标准受理申请,该标准可能要求进行脱机的、非自动的身份验证(圈外的身份验证)。如果申请被成功受理,CA 随后将向该用户颁发证书。
Windows 2000 PKI 支持向 Microsoft 企业 CA 和 Microsoft 独立 CA 或第三方 CA(如 GeoTrust)进行证书登记。Windows 2000 证书登记支持是以一种独立于传输的方式实现的,并以使用工业标准公钥加密标准 PKCS-10 的证书申请邮件和包含产生的证书或证书链的 PKCS-7 响应为基础。(Windows 使用 PKCS-7 中包含的 PKCS-10 进行更新。这使 Windows 可以用现有的证书对申请进行数字签名。)目前,Windows 2000 对支持 RSA 和 DSA 密钥与签名的证书提供支持。(有关 PKCS 的详细信息,请参见“Windows 2000 证书服务”白皮书。)
通过注册机构进行证书登记
一种特殊的证书登记可通过注册机构 (Registration Authority, RA) 来完成,RA 可为 CA 提供担保,以便将公钥与预期的证书持有人的身份及属性绑定在一起。RA 是拥有特殊证书的主体。这种特殊的证书包含有可以向 CA 表明主体身份的信息。通常,RA 在公钥和主体之间建立绑定,然后在主体生成的申请上签名,以便向 CA 提供该 RA 即将为绑定担保的证据。本质上,使用 RA 是管理委派的一种形式-CA 委派 RA 执行验证公钥和实体之间绑定的任务。
RA 生成在主体和公钥之间建立的牢固绑定的证书。在 Windows 2000 操作系统中,证书服务使用域身份验证来识别申请大多数类型证书的用户身份。创建智能卡登录证书的 Windows 2000 智能卡登记站由 RA 使用。RA 可验证智能卡收件人的身份,同时提供比域身份验证单独完成的主体与公钥之间的绑定更加牢固的绑定。
证书吊销
证书具有一个指定的寿命,但 CA 可通过称为证书吊销的过程来缩短这一寿命。CA 发布一个证书吊销列表 (CRL),列出被认为不能再使用的证书的序列号。CRL 指定的寿命通常比证书指定的寿命短得多。CA 也可以在 CRL 中加入证书被吊销的理由。它还可以加入被认为这种状态改变所适用的起始日期。
可将下列情况指定为吊销证书的理由:
泄露密钥, 泄露 CA, 从属关系改变,被取代,业务终止 ,证书持有(这是唯一让您能够改变被吊销证书状态的理由码,在证书状态有问题的情况下非常有用)
由 CA 吊销证书意味着,CA 在证书正常到期之前撤销其允许使用该密钥对的有关声明。在吊销的证书到期之后,CRL 中的有关条目被删除,以缩短 CRL 列表的大小。
在验证签名期间,应用程序可以检查 CRL,以确定给定证书和密钥对是否仍然可信(有些应用程序使用 CryptoAPI 中的 Microsoft 证书链验证 API 来完成此任务)。如果不可信,应用程序可以判断吊销的理由或日期对使用有疑问证书是否有影响。如果该证书被用来验证签名,且签名的日期早于 CA 吊销该证书的日期,那么该签名仍被认为是有效的。
应用程序获得 CRL 之后,由客户机缓存 CRL ,在它到期之前客户机将一直使用它。如果 CA 发布了新的 CRL,拥有有效 CRL 的应用程序并 不 使用新的 CRL,直到应用程序拥有的 CRL 到期为止。
证书链确认
Microsoft CryptoAPI 提供了一个标准的框架,应用程序可用此框架来获得加密服务和数字证书服务。除了 CryptoAPI 为 Windows 95、Windows 98、Windows NT 和 Windows 2000 提供的标准服务以外,第三方供应商可开发并销售他们自己的插件模块,提供附加的加密服务。
在 Windows 网络中,为新证书生成一个请求时,该请求中的信息首先被从请求程序传递给 CryptoAPI。然后,CryptoAPI 把相应的数据传递给一个称为加密服务提供程序 (CSP) 的程序,该程序安装在您的计算机上,或安装在您的计算机可以访问的某种设备(如智能卡)上。CSP 是一个执行诸如机密密钥交换、数据的数字签名以及公钥身份验证之类的加密操作的独立软件模块。任何 Windows 2000 服务或应用程序都可以向 CSP 请求加密操作。
Windows 2000 的证书链创建机制试图建立一个证书路径(证书链),下起最终实体证书(如用户证书),上至 CA 根证书:
证书链机制搜索证书(如果有的话)中的颁发机构密钥标识符 (AKI) 字段,以便在某个系统证书存储器中找到父(颁发者)证书。如果 AKI 中包含 Issuer 和 SerialNumber 字段的值,证书链机制将在系统证书存储器中查找特定的父证书;否则,它将使用密钥标识符的值来查找匹配的父证书。如果证书中没有 Issuer、Serial Number 和 Key Identifier 字段的值,那么证书链机制将使用 IssuerName 字段来查找匹配的父证书。
如果证书链机制根据上述字段未在系统存储器中找到匹配的父证书,它将搜索证书中的颁发机构信息访问 (Authority Information Access, AIA) 字段。它使用该字段中的信息(如果有的话)从指定位置 (如超文本传输协议 (HTTP) 6 http://www.microsoft.com .位置或轻型目录访问协议 (LDAP) 7 位置)检索父证书。
这一过程将针对用户最终实体证书的每一个父证书重复进行,直到在本地的可信根存储器中找到一个自签名证书为止。自签名证书是这样一种证书:它的主体名称和颁发者名称相同,它的公钥可用来验证与该证书相关的签名。