(转)PKI技术及应用开发指南
|
![]() |
级别: 初级 李明柱 博士 (mzli@263.net)北京邮电大学信息安全中心 2002 年 6 月 01 日 公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、证书认证机构CA、PKI应用、应用编程接口和PKI标准等,并对CA 的开发做了简要分析。本文对PKI,特别是CA的开发、应用和普及具有一定的促进作用。 随着网络技术和信息技术的发展,电子商务已逐步被人们所接受,并在得到不断普及。但由于各种原因,国内电子商务的安全性仍不能得到有效的保障。在常规业务中,交易双方现场交易,可以确认购买双方的身份。利用商场开具的发票和客户现场支付商品费用,无须担心发生纠纷和无凭证可依。但通过网上进行电子商务交易时,由于交易双方并不现场交易,因此,无法确认双方的合法身份,同时交易信息是交易双方的商业秘密,在网上传输时必须保证安全性,防止信息被窃取;双方的交易非现场交易,一旦发生纠纷,必须能够提供仲裁。 因此,在电子商务中,必须从技术上保证在交易过程中能够实现身份认证、安全传输、不可否认性、数据完整性。在采用数字证书认证体系之前,交易安全一直未能真正得到解决。由于数字证书认证技术采用了加密传输和数字签名,能够实现上述要求,因此在国内外电子商务中,都得到了广泛的应用。 PKI 采用证书进行公钥管理,通过第三方的可信任机构(认证中心,即CA),把用户的公钥和用户的其他标识信息捆绑在一起,其中包括用户名和电子邮件地址等信息,以在Internet网上验证用户的身份。PKI把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的安全传输。 因此,从大的方面来说,所有提供公钥加密和数字签名服务的系统,都可归结为PKI系统的一部分,PKI的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的网络运行环境,使用户可以在多种应用环境下方便的使用加密和数字签名技术,从而保证网上数据的机密性、完整性、有效性。数据的机密性是指数据在传输过程中,不能被非授权者偷看;数据的完整性是指数据在传输过程中不能被非法篡改;数据的有效性是指数据不能被否认。 一个有效的PKI系统必须是安全的和透明的,用户在获得加密和数字签名服务时,不需要详细地了解PKI的内部运作机制。在一个典型、完整和有效的PKI系统中,除证书的创建和发布,特别是证书的撤销,一个可用的PKI产品还必须提供相应的密钥管理服务,包括密钥的备份、恢复和更新等。没有一个好的密钥管理系统,将极大影响一个PKI系统的规模、可伸缩性和在协同网络中的运行成本。在一个企业中,PKI系统必须有能力为一个用户管理多对密钥和证书;能够提供安全策略编辑和管理工具,如密钥周期和密钥用途等。 PKI发展的一个重要方面就是标准化问题,它也是建立互操作性的基础。目前,PKI标准化主要有两个方面:一是RSA公司的公钥加密标准PKCS(Public Key Cryptography Standards),它定义了许多基本PKI部件,包括数字签名和证书请求格式等;二是由Internet工程任务组IETF(Internet Engineering Task Force)和PKI工作组PKIX(Public Key Infrastructure Working Group)所定义的一组具有互操作性的公钥基础设施协议。在今后很长的一段时间内,PKCS和PKIX将会并存,大部分的PKI产品为保持兼容性,也将会对这两种标准进行支持。 PKI的发展非常快,已经从几年前的理论阶段过渡到目前的产品阶段,并且出现了大量成熟技术、产品和解决方案,正逐步走向成熟。PKI的发展受应用驱动的影响,比如,早期的Internet商务和Web安全要求主要依赖于SSL,并要求应用首先对证书进行处理,所以,在很多公司的消息和群组产品中都提供了公钥和证书系统,如Exchange和Notes等。另外,基于标准的基础设施和应用也同样促进了PKI的发展,它能够保证基于Internet的安全消息传送的可交互性,如S/MIME等。 目前,PKI产品的生产厂家很多,比较有代表性的主要有VeriSign和Entrust。VeriSign作为RSA的控股公司,借助RSA成熟的安全技术,提供了 PKI产品,为用户之间的内部信息交互提供安全保障。另外,VeriSign也提供对外的CA服务,包括证书的发布和管理等功能,并且同一些大的生产商,如Microsoft、Netscape和JavaSoft等,保持了伙伴关系,以在Internet上提供代码签名服务。 Entrust作为北方电讯(Northern Telecom)的控股公司,从事PKI的研究与产品开发已经有很多年的历史了,并一直在业界保持领先地位,拥有许多成熟的PKI及配套产品,并提供了有效的密钥管理功能。 另外,一些大的厂商,如Microsoft、Netscape和Novell等,都开始在自己的网络基础设施产品中增加PKI功能。Netscape已经开始把证书服务器作为了SuiteSpot的一部分,虽然其证书服务器没有Entrust产品的功能全面和完善,但提供了基本的证书生成和管理功能。即使没有密钥管理功能,但由于Netscape把证书服务器同SuiteSpot服务器和Communicator客户端产品的集成,依靠广泛的市场基础,也取得的越来越多的市场份额。由SUN和Netscape联盟组成的iplanet公司(Sun|Netscape Alliance)也在PKI方面做了很大的努力,凭借其在网络和电子商务方面的优势,发展了很多性能优越的PKI产品,如LDAP目录服务器和证书管理系统等。
PKI作为一组在分布式计算系统中利用公钥技术和X.509证书所提供的安全服务,企业或组织可利用相关产品建立安全域,并在其中发布密钥和证书。在安全域内,PKI管理加密密钥和证书的发布,并提供诸如密钥管理(包括密钥更新,密钥恢复和密钥委托等)、证书管理(包括证书产生和撤销等)和策略管理等。 PKI产品也允许一个组织通过证书级别或直接交叉认证等方式来同其他安全域建立信任关系。这些服务和信任关系不能局限于独立的网络之内,而应建立在网络之间和Internet之上,为电子商务和网络通信提供安全保障,所以具有互操作性的结构化和标准化技术成为PKI的核心 PKI在实际应用上是一套软硬件系统和安全策略的集合,它提供了一整套安全机制,使用户在不知道对方身份或分布地很广的情况下,以证书为基础,通过一系列的信任关系进行通讯和电子商务交易。 一个典型的PKI系统如图1所示,其中包括PKI策略、软硬件系统、证书机构CA、注册机构RA、证书发布系统和PKI应用等。
![]() 图1 PKI组成框图 一个简单的PKI系统包括证书机构CA、注册机构RA和相应的PKI存储库。CA用于签发并管理证书;RA可作为CA的一部分,也可以独立,其功能包括个人身份审核、CRL管理、密钥产生和密钥对备份等;PKI存储库包括LDAP目录服务器和普通数据库,用于对用户申请、证书、密钥、CRL和日志等信息进行存储和管理,并提供一定的查询功能。
数字证书是一种数字标识,可以说是Internet上的安全护照或身份证明。当人们到其他国家旅行时,用户护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息和公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。 3.1.1 证书格式 为了适应PKI技术的发展,IETF也必须制定在Internet上使用X.509和CRL的标准。 PKIX工作组就提供了一个Internet草案"Part I: X.509 Certificate and CRL Profile"(详细内容可见:ftp://ftp.ietf.org/internet-drafts/draft-ietf-pkix-ipki- part1-11.txt),用于定义在Internet PKI中使用X.509和CRL的方法和规范。该草案把X.509作为标准,并对各标准项和扩展做了说明,基本接收了X.509作为Internet中的证书标准,但也定义了被PKI应用的X.509 V3和CRL V2标准格式的设置,这些设置包含了PKIX工作组对X.509所做的一些新的扩展。 X.509 目前有三个版本:V1、V2和V3,其中V3是在V2的基础上加上扩展项后的版本,这些扩展包括由ISO文档(X.509-AM)定义的标准扩展,也包括由其他组织或团体定义或注册的扩展项。X.509由ITU-T X.509(前身为CCITT X.509)或ISO/IEC 9594-8定义,最早以X.500目录建议的一部分发表于1988年,并作为V1版本的证书格式。X.500于1993年进行了修改,并在V1基础上增加了两个额外的域,用于支持目录存取控制,从而产生了V2版本。 为了适应新的需求ISO/IEC和ANSI X9发展了X.509 V3版本证书格式,该版本证书通过增加标准扩展项对V1和V2证书进行了扩展。另外,根据实际需要,各个组织或团体也可以增加自己的私有扩展。 X.509 V1和V2证书所包含的主要内容如下:
X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。 3.1.2 CRL格式
另外,CRL中还包含扩展域和条目扩展域。CRL扩展域用于提供与CRL有关的额外信息部份,允许团体和组织定义私有的CRL扩展域来传送他们独有的信息; CRL条目扩展域则提供与CRL条目有关的额外信息部份,允许团体和组织定义私有的CRL条目扩展域来传送他们独有的信息。 3.1.3 证书的存放
证书机构CA用于创建和发布证书,它通常为一个称为安全域(security domain)的有限群体发放证书。创建证书的时候,CA系统首先获取用户的请求信息,其中包括用户公钥(公钥一般由用户端产生,如电子邮件程序或浏览器等),CA将根据用户的请求信息产生证书,并用自己的私钥对证书进行签名。其他用户、应用程序或实体将使用CA的公钥对证书进行验证。如果一个CA系统是可信的,则验证证书的用户可以确信,他所验证的证书中的公钥属于证书所代表的那个实体。 CA还负责维护和发布证书废除列表CRL(certificate revocation lists,又称为证书黑名单)。当一个证书,特别是其中的公钥因为其他原因无效时(不是因为到期),CRL提供了一种通知用户和其他应用的中心管理方式。CA系统生成CRL以后,要么是放到LDAP服务器中供用户查询或下载,要么是放置在Web服务器的合适位置,以页面超级连接的方式供用户直接查询或下载。 一个典型的CA系统包括安全服务器、注册机构RA、CA服务器、LDAP目录服务器和数据库服务器等。如图2所示。 ![]() 图2 典型CA框架模型
证书的申请有两种方式,一是在线申请,另外一个就是离线申请。在线申请就是通过浏览器或其他应用系统通过在线的方式来申请证书,这种方式一般用于申请普通用户证书或测试证书。离线方式一般通过人工的方式直接到证书机构证书受理点去办理证书申请手续,通过审核后获取证书,这种方式一般用于比较重要的场合,如服务器证书和商家证书等。下面讨论的主要是在线申请方式。 当证书申请时,用户使用浏览器通过Internet访问安全服务器,下载CA的数字证书(又叫做根证书),然后注册机构服务器对用户进行身份审核,认可后便批准用户的证书申请,然后操作员对证书申请表进行数字签名,并将申请及其签名一起提交给CA服务器。 CA 操作员获得注册机构服务器操作员签发的证书申请,发行证书或者拒绝发行证书,然后将证书通过硬拷贝的方式传输给注册机构服务器。注册机构服务器得到用户的证书以后将用户的一些公开信息和证书放到LDAP服务器上提供目录浏览服务,并且通过电子邮件的方式通知用户从安全服务器上下载证书。用户根据邮件的提示到指定的网址下载自己的数字证书,而其他用户可以通过LDAP服务器获得他的公钥数字证书。 证书申请的步骤如下:
这时用户打开浏览器的安全属性,就可以发现自己已经拥有了CA颁发的数字证书,可以利用该数字证书与其他人以及web服务器(拥有相同CA颁发的证书)使用加密、数字签名进行安全通信。 认证中心还涉及到CRL的管理。用户向特定的操作员(仅负责CRL的管理)发一份加密签名的邮件,申明自己希望撤消证书。操作员打开邮件,填写CRL注册表,并且进行数字签名,提交给CA,CA操作员验证注册机构操作员的数字签名,批准用户撤消证书,并且更新CRL,然后CA将不同格式的CRL输出给注册机构,公布到安全服务器上,这样其他人可以通过访问服务器得到CRL。 证书撤销流程步骤如下:
在一个PKI,特别是CA中,信息的存储是一个非常核心的问题,它包括两个方面:一是CA服务器利用数据库来备份当前密钥和归档过期密钥,该数据库需高度安全和机密,其安全等级同CA本身相同;另外一个就是目录服务器,用于分发证书和CRL,一般采用LDAP目录服务器。 密钥管理也是PKI(主要指CA)中的一个核心问题,主要是指密钥对的安全管理,包括密钥产生、密钥备份、密钥恢复和密钥更新等。 1. 密钥产生 2. 密钥备份和恢复 3. 密钥更新 在实际应用中,为了验证信息的数字签名,用户首先必须获取信息发送者的公钥证书,以及一些额外需要的证书(如CA证书等,用于验证发送者证书的有效性)。 证书的获取可以有多种方式,如发送者发送签名信息时附加发送自己的证书,或以另外的单独信息发送证书,或者可以通过访问证书发布的目录服务器来获得,或者直接从证书相关的实体处获得。在一个PKI体系中,可以采取某种或某几种上述方式获得证书。 在电子商务系统中,证书的持有者可以是个人用户、企事业单位、商家、银行等。无论是电子商务中的哪一方,在使用证书验证数据时,都遵循同样的验证流程。一个完整的验证过程有以下几步:
如果以上各项均验证通过,则接受该数据。
---PKI技术的广泛应用能满足人们对网络交易安全保障的需求。当然,作为一种基础设施,PKI的应用范围非常广泛,并且在不断发展之中,下面给出几个应用实例。 1. 虚拟专用网络(VPN) 2. 安全电子邮件 3. Web安全
协议标准是系统具有可交互性的前提和基础,它规范了PKI系统各部分之间相互通信的格式和步骤。而应用编程界面API(Application programming interfaces)则定义了如何使用这些协议,并为上层应用提供PKI服务。当应用需要使用PKI服务,如获取某一用户的公钥、请求证书废除信息或请求证书时将会都会用到API。目前API没有统一的国际标准,大部分都是操作系统或某一公司产品的扩展,并在其产品应用的框架内提供PKI服务。 目前,有很多可以让开发者选择的API类型。IETF建议标准为通用安全服务API:GSS-API(Generic Security Service Application Program Interface),它提供了一种接口与网络机制和网络协议相互独立的实现。 欧洲建立的SESAME(Secure European System for Applications in a Multi-Vendor Environment)定义了一些安全界面,并作为该组织发展的安全技术的一部分,该接口得到了欧洲许多著名厂商的支持,如Bull SA、ICL和Seimens等,但没有在美国得到支持,特别是一些大的厂商,如Microsoft和Netscape等。 Entrust 也为其产品提供了一套API,如Entrust证书管理服务API(CMS API,Entrust's Certificate Management Services API),该API允许应用使用Entrust的证书管理和分发服务。在1996年指定,并与1997年更新的PKIX Internet草案"Architecture for Public Key Infrastructure"定义了PKI结构,并建议了许多标准,其中就包括API。 目前,在API市场处于领先地位的是Microsoft的CryptoAPI和Intel的公用数据安全框架CDSA(Common Data Security Architecture),他们凭借自己的产品优势相互竞争。Microsoft利用其广泛的操作系统市场,而Intel则凭借其PC芯片的优势,并与其它厂商,如IBM、Entrust和Netscape等进行联合,共同支持CDSA。现在也有很多厂商的PKI产品同时支持这两种API,如 Entrust等。PKIX在很多情况下支持CDSA,并建议其为"Architecture for Public Key Infrastructure"草案的标准。 除此之外,Entrust、IBM、Intel、 Netscape和TIS等联合向开放组织(Open Group)提议了一个基于CDSA的加密和证书管理接口,并使用了Entrust的CMS API、IBM的密钥恢复API。但开放组织同时也在考虑使用PKCS #11作为安全API接口。 下面介绍目前两个比较常用的安全API接口:CryptoAPI和CDSA接口。 微软加密应用程序接口CryptoAPI(Microsoft Cryptographic Application Programming Interface)为Win32应用程序提供了认证、编码、加密和签名等安全处理,它可使用户在对复杂的加密机制和加密算法不了解的情况下,而对应用程序增加安全功能。这样很符合Windows的设计风格,就像用户可是使用图形库而不需要了解图形硬件一样。 目前CryptoAPI的最新版本是2.0版,在包含CryptoAPI 1.0的全部功能外,还增加了证书管理功能,为网络身份认证提供的基本保证。 CryptoAPI通过一系列的库函数来对应用程序提供PKI安全服务,其整体系统结构如图3所示: ![]() 图3 CryptoAPI系统结构 CryptoAPI 的编程模型同Windows系统的图形设备接口 GDI比较类似,其中加密服务提供者CSP(Cryptographic Service Providers)等同于图形设备驱动程序 ,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道 CryptoAPI 共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。 CDSA(Common Data Security Architecture)为安全应用服务提供了一个整体框架和解决方案,提供了诸如证书管理等许多PKI功能。 同CryptoAPI 类似,CDSA也是以一个分层的服务提供者框架为基础,其的应用模式可分为四层,最上层是应用程序,应用程序的下层是中间件,例如SSL、IPSEC接口、语言接口转换器等,接下来是CSSM层,CSSM层是CDSA的核心层,CSSM的下层是具体的服务提供者,如加密服务、证书服务、政策服务、数据存储服务等,如图4所示。 ![]() 图4 CDS系统结构 --- CSSM 是CDSA的核心部分,它表现为一组公开的应用编程接口(API),为应用程序提供安全功能的调用,共包含4个基本的安全模块。
---- 另外,任何软、硬件厂商都可以建立自己的服务提供模块,无缝嵌入到CDSA的开放式框架中。在CDSA 2.0中又增加任选模块管理,支持更方便地增加模块。 另外,还可以对CSSM进行更高一层的抽象,提供高层的API,使开发者更容易使用CDSA提供的PKI安全功能。
随着PKI的发展和应用的不断普及,PKI的产品也越来越多,为了保持个产品之间的兼容性,标准化成了PKI不可避免的发展趋势。 PKI的标准可分为两个部分:一类用于定义PKI,而另一类用于PKI的应用。 在PKI技术框架中,许多方面都经过严格的定义,如用户的注册流程、数字证书的格式、CRL的格式、证书的申请格式以及数字签名格式等。 国际电信联盟ITU X.509协议,是PKI技术体系中应用最为广泛、也是最为基础的一个国际标准。它的主要目的在于定义一个规范的数字证书的格式,以便为基于X.500协议的目录服务提供一种强认证手段。但该标准并非要定义一个完整的、可互操作的PKI认证体系。 PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准:
另外,PKCS#2和PKCS#4已经合并到PKCS#1之中。PKIX是由IETF组织中的PKI工作小组制定的系列国际标准。此类标准主要定义基于X.509和PKCS的PKI模型框架。PKIX中定义的四个主要模型为用户、认证中心CA、注册中心RA和证书存取库。 目前世界上已经出现了许多依赖于PKI的安全标准,即PKI的应用标准,如安全的套接层协议SSL、传输层安全协议TLS、安全的多用途互连网邮件扩展协议S/MIME和IP安全协议IPSEC等。
另外,随着PKI的进一步发展,新的标准也在不断的增加和更新。
从目前的发展来说,PKI的范围非常广,而不仅仅局限于通常认为的CA机构,它还包括完整的安全策略和安全应用。因此,PKI的开发也从传统的身份认证到各种与应用相关的安全场合,如企业安全电子商务和政府的安全电子政务等。 另外,PKI的开发也从大型的认证机构到与企业或政府应用相关的中小型PKI系统发展,既保持了兼容性,又和特定的应用相关。在以后的文章中,我们会对PKI的源代码工程OpenCA进行详细分析,为PKI的开发提供借鉴。
|