免费预览已结束,剩余48页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文(科研训练、毕业设计)题 目:基于OPENSSL的小型CA系统的实现姓 名:学 院:软件学院系:软件工程专 业:软件工程年 级:学 号:指导教师: 职称: 年 月48摘 要为了确保网络时代的信息安全,应用最有效的安全技术来建立信息安全体系结构成为首先需要解决的问题。国际上提出了基于公钥基础设施(PKI,Public Key Infrastructure)作为标准的信息安全体系结构,现已被普遍采用。PKI是目前网络安全建设的基础与重点,构架PKI体系核心的技术就是建立功能完善的、安全的认证中心(CA,Certificate Authority),而OpenSSL为之提供了丰富的功能,支持多种标准。OpenSSL是一个用标准C写的SSL/TLS实现, 该软件工具包包含了完整的加密算法、数字签名算法及证书管理等。本文主所做的工作就是对PKI的相关理论知识进行了阐述,对实体CA,RA,客户端进行了功能上的实现,利用OpenSSL函数库中的证书和加密函数,从X.509数字证书格式出发,一步一步的阐述数字证书的制作过程和证书撤消列表的制作过程。另外,还对CA的证书管理、密钥管理、CRL管理进行了详细的阐述。课题中开发出来的小型CA系统经过测试,能够支持CA的基本功能,包括根证书的产生和管理,用户证书的产生、颁发、回收、撤销等功能。关键词:OpenSSL CA PKI 证书管理AbstractIn order to ensure the information security of the internet-oriented era, It is become the first issues to be addressed to establish an information security architecture using the most effective safety technology. The international community made a public key infrastructure (PKI, Public Key Infrastructure) as a standard of information security architecture which is now being widely adopted. PKI is the foundation and keystone for building network security. It is the core technology for building PKI framework system that found a consummate, safe Certification Center (CA, Certificate Authority). And OpenSSL provide them with a wealth of function and support manifold standard. OpenSSL is a standard written in C SSL / TLS achieved, the software tool kit contains a complete encryption algorithm, the digital signature algorithm and certificate management.The dissertation discusses the related theory of PKI,realizes the function of entity CA、RA and client,utilizes certification and encryption functions in the OpenSSL function storehouse,through the X.509 standard,it elaborates certification and revocation list step by step. Besides these, the paper elaborates administration of certificate administration、Key management、CRL administration in detail. The small CA system developed in the task meets the function of CA , such as the produce and management of Root Certificate , the produce , issue ,callback, revocation of the User Certificate. Keywords: Openssl CA PKI Certificate Administration 目 录第一章绪论11.1课题背景及研究意义11.2 主要研究内容及特色31.3 论文章节安排3第二章数字证书基础42.1 数字证书42.2 证书格式42.3 CRL格式62.4 证书的存放7第三章CA系统总体设计83.1 系统功能结构83.2 CA服务器端的设计93.2.1 CA认证中心93.2.2 RA注册审批机构113.3客户端设计113.4 CA系统软件结构12第四章CA系统实现144.1 CA服务器端的实现144.1.1 数字证书的实现过程144.1.2制作证书撤销列表174.2客户端的实现204.3 CA系统运行20第五章 结束语25致谢语 26参考文献 27附录 28Table of ContentsChapter1 Introduction11.1 Background And Significance Of Task11.2 Main Contents And Characteristics31.3 Arrangement Of Chapter Dissertation3Chapter2 The Basic Of Digital Certificates42.1 Digital Certificate42.2 Certificate Format42.3 CRL Format62.4 The Storage Of Certificate7Chapter3 Architectural Design Of CA System83.1 The Functional Structure Of System83.2 The Design Of CA Server93.2.1 Certification Authority Center93.2.2 Registration Authority113.3 The Design Of Client113.4 The Software Structure Of CA System12Chapter4 The Implementation of CA System144.1 The Implementation of CA Server144.1.1 The Process Of Digital Certificates Implementation144.1.2 Make Certificate Revocation Lists174.2 The Implementation of Client204.3 The Running Of CA System20Chapter5 Conclusions25Acknowledgements 26Reference 27Supplement 28第一章 绪论1.1课题背景及研究意义随着网络技术和信息技术的发展,电子商务已逐步被人们所接受,并在得到不断普及。但由于各种原因,国内电子商务的安全性仍不能得到有效的保障。在常规业务中,交易双方现场交易,可以确认购买双方的身份。利用商场开具的发票和客户现场支付商品费用,无须担心发生纠纷和无凭证可依。但通过网上进行电子商务交易时,由于交易双方并不现场交易,因此,无法确认双方的合法身份,同时交易信息是交易双方的商业秘密,在网上传输时必须保证安全性,防止信息被窃取;双方的交易非现场交易,一旦发生纠纷,必须能够提供仲裁。因此,在电子商务中,必须从技术上保证在交易过程中能够实现身份认证、安全传输、不可否认性、数据完整性。在采用数字证书认证体系之前,交易安全一直未能真正得到解决。由于数字证书认证技术采用了加密传输和数字签名,能够实现上述要求,因此在国内外电子商务中,都得到了广泛的应用。为了确保网络时代的信息安全,应用最有效的安全技术来建立信息安全体系结构成为首先需要解决的问题。国际上提出了基于公钥基础设施(PKI,Public Key Infrastructure)作为标准的信息安全体系结构,现已被普遍采用。PKI是“Public Key Infrastructure”的缩写,意为“公钥基础设施” 。PKI是一种完全符合X509标准的密钥管理平台,它能够为所有网络应用透明地提供采用加密和数字签名等密码服务所必需的密钥和证书管理。在PKI中,最关键的实体是数字证书,它提供网络上的身份证明。数字证书拥有者可以将其证书提供给其他人、Web站点及网络资源,以证实他的合法身份,并且与对方建立加密的、可信的通信。证书还同时起着公钥分发的作用,每份证书都携带着持有人的公钥,签名证书携带的是签名公钥,信息加密证书携带的是信息加密公钥。所有实体的证书是由一个权威机构CA(Certificate Authority)发行的。CA是保证信息安全的关键。PKI采用证书进行公钥管理,通过第三方的可信任机构(认证中心,即CA),把用户的公钥和用户的其他标识信息捆绑在一起,其中包括用户名和电子邮件地址等信息,以在Internet网上验证用户的身份。PKI把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的安全传输。虽然基于各个不同的标准和应用场合PKI体系会有不同的结构,但是总体来说,作为可靠的实体建立和保证信任关系的服务体系,在PKIX系列标准中RFC2510(Internet X.509 Public Key Infrastructure-Certificate ManagementProtocol)定义了PKI组件模型。PKI体系机构内的主要组件包括:(1) 客户PKI证书用户,否则被确定为最终实体;最终用户或系统,它们是PKI证书的主体;(2) 证书机构(CA)发行和撤销PKI证书(3) 注册机构(RA)确定公开密钥和证书持有者身份之间的连接(4) 资料库存储证书和证书撤消列表(certificate Revocation List,CRL)CRL的系统;向最终实体提供证书和CRL的分发机制;PKI组件及其相互之间的主要关系如图1-1所示:图1-1 PKI组件及其相互之间的主要关系其中各组件的流包括:操作事务、管理事务、证书和CRL公布。操作事务是包含在操作协议文档中的消息交换,其提供证书、CRL和其他管理与状态信息的优先传输。管理事务是管理协议文档中描述的消息交换,它提供通知服务,支持PKI内的管理事务或操作,用于向公开库分发证书和CRL。本文的小型CA系统是利用OpenSSL来实现的。OpenSSL是一个可以自由使用的SSL实现, 其前身是SSLeay, 由Eric A. Young和Tim J. Hudson于1995年开发, 它包含了一套程序以及函数库, 提供前端使用者SSL 功能, 并且允许软件工程师将SSL模块与他们的程序结合, 其程序是一个指令列接口的程序, 它以手动的方式起始SSL 连结, 重新导引与其它程序之间的资料输入以及输出。OpenSSL是一个库, 它为类似安全web服务器这样的应用提供加密功能, 它包含一个可以用于执行加密功能的命令行工具。OpenSSL不但实现了SSL的一些接口, 它所涵盖的内容从底层对称、非对称加密算法到建立在其上的PKCS的接口(包括X.509证书、PKCS标准、ASN.1等)的实现是一应俱全, 利用OpenSSL的源代码可以构建各种有关数据加密的应用和PKCS接口。1.2 主要研究内容及特色本文主所做的工作就是对PKI的相关理论知识进行了阐述,对实体CA,RA,客户端进行了功能上的实现,利用OpenSSL函数库中的证书和加密函数,从X.509数字证书格式出发,一步一步的阐述数字证书的制作过程和证书撤消列表的制作过程。另外,还对CA的证书管理、密钥管理、CRL管理进行了详细的阐述。课题中开发出来的小型CA系统经过测试,能够支持CA的基本功能,包括根证书的产生和管理,用户证书的产生、颁发、回收、撤销等功能。1.3 论文章节安排本文从PKI相关理论知识入手,实现了一个小型CA系统,全文共分五章,具体章节内容如下:第一章(绪论):主要讲述课题研究背景及意义,分析现有安全机制存在的问题,提出PKI是解决网络中信息安全问题最全面的技术方案,并列举了本文所做的工作。第二章(数字证书基础):讲述了数字证书的基本概念,介绍了相关的证书格式。第三章(CA系统的总体设计):在PKI相关理论和实现技术的基础上给出了CA系统的总体设计方案。第四章(CA系统的实现):介绍了整个CA系统服务器端和客户端功能的具体实现。主要讨论了CA对数字证书的制作过程以及CRL的制作过程。第五章(结论与展望):总结了本文所做的工作。第二章 数字证书基础2.1 数字证书 数字证书是一种数字标识,可以说是Internet上的安全护照或身份证明。当人们到其他国家旅行时,用户护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息和公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。2.2 证书格式 在Internet网络中,应用程序使用的证书都来自不同的厂商或组织,为了实现可交互性,要求证书能够被不同的系统识别,符合一定的格式,并实现标准化。X.509为证书及其CRL格式提供了一个标准。但X.509本身不是Internet标准,而是国际电联ITU标准,它定义了一个开放的框架,并在一定的范围内可以进行扩展。为了适应PKI技术的发展,IETF也必须制定在Internet上使用X.509和CRL的标准。PKIX工作组就提供了一个Internet草案Part I: X.509 Certificate and CRL Profile,用于定义在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证书所包含的主要内容如下:证书版本号(Version):版本号指明X.509证书的格式版本,现在的值可以为0、1、2,也为将来的版本进行了预定义。 证书序列号(SerialNumber):序列号指定由CA分配给证书的唯一的数字型标识符。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。 签名算法标识符(Signature):签名算法标识用来指定由CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和hash算法,须向国际知名标准组织(如ISO)注册。 签发机构名(Issuer):此域用来标识签发证书的CA的X.500 DN名字。包括国家、省市、地区、组织机构、单位部门和通用名。 有效期(Validity):指定证书的有效期,包括证书开始生效的日期和时间以及失效的日期和时间。每次使用证书时,需要检查证书是否在有效期内。 证书用户名(Subject):指定证书持有者的X.500唯一名字。包括国家、省市、地区、组织机构、单位部门和通用名,还可包含email地址等个人信息等 证书持有者公开密钥信息(subjectPublicKeyInfo):证书持有者公开密钥信息域包含两个重要信息:证书持有者的公开密钥的值;公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。 签发者唯一标识符(Issuer Unique Identifier):签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。 证书持有者唯一标识符(Subject Unique Identifier):持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。 签名值(Issuers Signature):证书签发机构对证书上述内容的签名值。X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。2.3 CRL格式 证书废除列表CRL(Certificate revocation lists,又称证书黑名单)为应用程序和其它系统提供了一种检验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方。目前,同X.509 V3证书对对应的CRL为X.509 v2 CRL,其所包含的内容格式如下: CRL的版本号:0表示X.509 V1 标准;1表示X.509 V2 标准;目前常用的是同X.509 V3证书对应的CRL V2版本。 签名算法:包含算法标识和算法参数,用于指定证书签发机构用来对CRL内容进行签名的算法。 证书签发机构名:签发机构的DN名,由国家、省市、地区、组织机构、单位部门和通用名等组成。 此次签发时间:此次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 下次签发时间:下次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 用户公钥信息,其中包括废除的证书序列号和证书废除时间。废除的证书序列号是指要废除的由同一个CA签发的证书的一个唯一标识号,同一机构签发的证书不会有相同的序列号。 签名算法:对CRL内容进行签名的签名算法。 签名值:证书签发机构对CRL内容的签名值。另外,CRL中还包含扩展域和条目扩展域。CRL扩展域用于提供与CRL有关的额外信息部份,允许团体和组织定义私有的CRL扩展域来传送他们独有的信息;CRL条目扩展域则提供与CRL条目有关的额外信息部份,允许团体和组织定义私有的CRL条目扩展域来传送他们独有的信息。2.4 证书的存放 数字证书作为一种电子数据格式,可以直接从网上下载,也可以通过其他方式。使用IC卡存放用户证书。即把用户的数字证书写到IC卡中,供用户随身携带。这样用户在所有能够读IC卡证书的电子商务终端上都可以享受安全电子商务服务。 用户证书直接存放在磁盘或自己的终端上。户将从CA申请来的证书下载或复制到磁盘或自己的PC机或智能终端上,当用户使用自己的终端享受电子商务服务时,直接从终端读入即可。另外,CRL一般通过网上下载的方式存储在用户端。第三章 CA系统总体设计3.1 系统功能结构CA系统功能结构如图3-1所示:图3-1 CA系统架构首先,用户申请下载证书,然后在证书的申请过程中使用SSL安全方式与服务器建立连接,用户填写个人信息,浏览器生成私钥和公钥对,将私钥保存客户端特定文件中,并且要求用口令保护私钥,同时将公钥和个人信息提交给安全服务器。安全服务器将用户的申请信息传送给注册机构服务器。注册机构RA申核后通过硬拷贝的方式向CA传输用户的证书申请与操作员的数字签名,CA操作员查看用户的详细信息,并且验证操作员的数字签名,如果签名验证通过,则同意用户的证书请求,颁发证书。然后CA将证书输出。如果CA操作员发现签名不正确,则拒绝证书申请。3.2 CA服务器端的设计开放网络上的电子商务要求为信息安全提供有效的、可靠的保护机制。这些机制必须提供机密性、身份验证特性、不可否认性。这就需要依靠一个可靠的第三方机构CA认证中心验证,所以,使用证书安全机制的前提是建立CA认证中心以及配套的RA注册审批机构系统。3.2.1 CA认证中心CA(Certification Authority)中心,又称为数字证书认证中心,作为电子商务交易中受信任的第三方,专门解决公钥体系中公钥的合法性问题。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户名称与证书中列出的公开密钥相对应。CA中心的数字签名使得攻击者不能伪造和篡改数字证书。在数字证书认证的过程中,证书认证中心(CA)作为权威的、公正的、可信赖的第三方,其作用是至关重要的。认证中心就是一个负责发放和管理数字证书的权威机构。同样CA允许管理员撤销发放的数字证书,在证书撤销列表(CRL)中添加新项并周期性地发布这一数字签名的CRL。认证中心CA的主要功能有:(1) 接收并验证最终用户数字证书的申请;(2) 证书审批,确定是否接受最终用户数字证书的申请;(3) 证书签发,向申请者颁发、拒绝颁发数字证书;(4) 证书更新,接收、处理最终用户的数字证书更新请求;(5) 接收最终用户数字证书的查询、撤销;(6) 产生和发布证书废止列表(CRL),验证证书状态;(7) 提供OCSP在线证书查询服务,验证证书状态;(8) 提供目录服务,可以查询用户证书的相关信息;(9) 下级认证机构证书及帐户管理;(10) 数字证书归档;(11) 认证中心CA及其下属密钥的管理;(12) 历史数据归档。认证中心为了实现其功能,主要由以下三部分组成:(1) 注册服务器:通过Web Server建立的站点,可为客户提供每日24小时的服务。因此客户可在自己方便的时候在网上提出证书申请和填写相应的证书申请表,免去了排队等候等烦恼。(2) 证书申请受理和审核机构:负责证书的申请和审核。它的主要功能是接受客户证书申请并进行审核。(3) 认证中心服务器:是数字证书生成、发放的运行实体,同时提供发放证书的管理、证书撤销列表(CRL)的生成和处理等服务。证书管理模块是整个系统种最重要的一部分,也是本文主要实现的一部分。下图是证书管理模块功能图。各管理模块的主要功能分别如下图3-2:图3-2 证书管理模块功能图1 用户管理CA的用户管理只是完成属于自己RA用户信息的收集,完成用户的统一管理。2 证书管理证书管理主要包括用户证书管理和根证书管理两大部分。其中,根证书管理是整个系统安全的重点之一,如果根证书遭到破坏,整个系统将会崩溃。根证书要有严格的安全机制,还要进行备份,以便遭到破坏时能够及时恢复。要注意,在根证书备份的过程中,必须多人同时参与,任何一个管理员都不能独立完成备份过程,另外,如果是多级CA体系结构,下属各级CA证书也同样需要备份。根证书和各级CA证书都要存放在不与外界相连的机器上,最大限度的保证其安全性。用户证书管理主要功能是:(1) 生成证书:对审核通过的申请生成证书,并将证书存储到数据库中。密钥生成模式采用集中生成模式,即私钥/公钥对由CA产生。使用这种模式,是基于企业网和证书管理系统的特点考虑。可以便于CA管理密钥对,也方便用户,使用户不需要了解关于密钥对的知识。发布证书的信道并不非要是安全的,因为证书本身是一个自我保护的结构(含有CA的签名)。私钥就需要通过绝对安全的渠道发布给用户。(2) 查询证书:便于管理员管理用户证书。3 CRL管理CRL管理主要功能是:将撤销审核通过的证书放入撤销证书库;定期生成CRL列表;CRL列表查询。4 密钥管理关于密钥,特别是私钥的托管,是目前一个争论的焦点。许多用户视私钥为个人隐私,不希望自己的私钥被CA知道从而有可能被冒用,但是在很多场合,如管理部门需要在用户丢失私钥的情况下对己经由其对应公钥加密的有效交易进行监控,这也为权威中心托管用户私钥带来合理性。3.2.2 RA注册审批机构RA(Registration Authority),数字证书注册审批机构。它是PKI信任体系的重要组成部分,是用户和CA认证中心之间的一个接口,是认证机构CA信任范围的一种延伸。注册机构RA接收用户的注册申请,获取并认证用户的身份,完成收集用户信息和确认用户身份的功能。RA可以说是CA的代理,它负责证书申请者的信息录入、审核以及证书发放等工作,同时对发放的证书完成相应的管理功能。对于一个规模较小的CA应用系统来说,可把注册管理的职能由认证中心来完成,而不设立独立运行的RA,将PKI的注册功能作为认证中心的一项功能实现。但为了增强应用系统的安全,PKI国际标准推荐由独立的RA来完成注册管理的任务,本系统为了方便调试,将RA的功能由CA来实现。3.3客户端设计客户端功能主要由RA客户端提供。客户端具有的功能有:向终端实体提供证书申请服务、证书的审核、证书的撤销、证书的查询等,它在RA和CA之间起到一个桥梁的作用。作为安全通信的接收端点,CA客户端软件是一个全功能、可操作PKI的必要组成部分。客户端与服务器端的信息交互可以通过在线方式或者离线(不通过网路,而通过其他安全的通信手段或直接与CA中心进行交互)两种方式完成。而此文中客户端软件主要针对在线方式设计。客户端子系统可以分为两个模块:证书申请模块和证书使用模块。证书申请模块是终端用户和RA子系统之间的交流工具;证书使用模块是终端用户使用证书的工具。3.4 CA系统软件结构CA系统软件结构设计图如图3-3图3-3 CA系统软件设计图(1) ASN.1数据机构:在国际性标准协议中,数据结构和消息都是采用ASN.1进行描述的,以保证数据类型的明晰。这里主要是负责将ASN.1描述的数据结构转化成编程语言所表示的内部数据结构。(2) 加密软件包:用于实现密码算法(SHA1、RSA等),用于屏蔽底层的加密模块,为上一层提供一个统一的函数调用接口,保证系统的相互独立性。(3) 加密卡:提供各种专用的密码算法及密钥管理函数。(4) I/O操作:负责处理各种输入、输出操作,为缓存处理、日志处理以及其他操作提供一个抽象的I/O接口。(5) 数据库I/O:处理系统所需的各种数据库读写操作。(6) 文件I/O:负责处理系统所需的各种文件输入、输出操作。(7) X.509处理:生成和处理各种X.509标准的消息。(8) 证书CRL:接收证书与CRL查询请求,从数据库中检索出符合条件的证书和最新的CRL,发送给用户。(9) 密钥处理:提供基于口令的通过USBKey存取私钥的功能。(10)日志处理:提供证书和CRL的功能备份,以便在系统发生故障时,通过数据备份进行恢复。(11)证书处理:便于简化管理,对证书中各种数据的读取、查询等作为一个独立的模块。(12)通信接口:用于封装TCP/IP通信函数,为上层应用提供简易的通信接口。第四章 CA系统实现4.1 CA服务器端的实现4.1.1 数字证书的实现过程结合在第二章已讨论过的X.509证书格式如图4-1:图4-1 X.509证书格式对照X.509证书格式内容,给出了X.509证书的详细制作流程。如图4-2:图4-2 X.509证书制作流程1产生非对称密钥对数字证书的关键就是利用非对称密码学的原理,将公钥和一些具体的实体信息进行绑定与它配对的私钥联合使用,来达到数字证书广泛使用的目的。所以要制作数字证书就必须形成一对安全的密钥对。在密码学领域比较流行的非对称密钥算法是RSA算法,在openssl里,产生RSA密钥对的函数RSA_generate_key定义在文件rsa_gen.c中,如下:RSA*RSA_generate_key(int bits,unsigned long e_value,void(*callback)(int,int,void*),void*cb_arg)参数bits是密钥的长度(如1024),参数e_value是rsa中公开的加密密钥,一般有3,17 or 65537,常用0x10001l,第三、四个参数为产生私钥过程中的回调函数,在一般应用中将它们置为null即可,结果返回一个RSA结构。利用RSA_generate_key函数,创建密钥对的主要过程如下:EVP_PKEY*pNewRsaKey;/定义一个EVP_PKEY类型指针pNewRsaKey=EVP_PKEY_new()/给指针初始化,分配空间App_rand_load_files(char*file)/此函数的目的是导入随机数种子文件,这里可以建立一个包含两三行以上的随机字符的文件,满足RSA算法需要的两个随机大素数。EVP_PKEY_assign_RSA(pNewRsaKey,RSA_generate_key(1024,0x10001,NULL,NULL)在具体应用中使用更高一层的EVP_PKEY结构,把RSA类型转化成更加通用的EVP_PKEY类型,将密钥对保存在pNewRsaKey中。2证书申请根据PKCS#10,openssl的X509数字证书申请结构定义在crypto/x509.h中,如下所示,主要由两部分组成:(1) 证书请求信息结构X509_REQ_INFOtypedef struct X509_req_info_stASN1_ENCODING enc;ASN1_INTEGER *version;X509_NAME *subject;X509_PUBKEY *pubkey;STACK_OF(X509_ATTRIBUTE) *attributes; X509_REQ_INFO;该结构为证书申请信息主体,其中version表示版本,subject为申请者信息,pubkey为申请者公钥信息,attributes为可选的属性信息。该结构的DER编码接口在crytpo/asn1/x_req.c中由宏实现,实现了new、free、i2d和d2i函数。为了获取证书的subject信息,CA必须提供界面供用户输入国家(SzCountryName)、省份、城市等信息,具体处理过程如下:X509_NAME*pSubjectName;pSubjectName=X509_NAME_new();X509_NAME_ENTRY*ent;Int nid;nid=OBJ_txt2nid(“countryName”);/查找标准证书中数据项“countryName”对应的整数值ent=X509_NAME_ENTRY_create_by_NID(NULL,nid,MBSTRING_UTF8,(unsignedchar*)SzCountryName,-1);X509_NAME_add_entry(pSubjectName,ent,-1,0)通过以上过程的循环处理,可将输入的主题信息转化为X509_NAME的数据项。(2) 证书请求结构 X509_REQtypedef struct X509_req_stX509_REQ_INFO *req_info;X509_ALGOR *sig_alg;ASN1_BIT_STRING *signature;int references; X509_REQ;该结构为证书申请信息,req_info为信息主体,sig_alg为签名算法,signature为签名值(申请者对req_info的DER编码值用自己的私钥签名)。该结构的DER编码接口在crytpo/asn1/x_req.c中由宏实现,实现了new、free、i2d和d2i函数。3. 制作X.509证书为了生成X.509证书,需要对上一步产生的请求证书作进一步的处理,如:添加版本号、证书的序列号、设置证书的有效开始时间和终止时间,在证书中放入用户的公钥,以及用CA的公钥对证书信息进行签名,具体步骤如下:X509*m_pClientCert;m_pClientCert=X509_new();X509_set_version(m_pClientCert,Versions)/设置版本号ASN1_INTEGER_set(X509_get_serialNumber(m_pClientCert),sn)/设置序列号X509_gmtime_adj(X509_get_notBefore(m_pClientCert),0)/设置开始时间X509_gmtime_adj(X509_get_notAfter(m_pClientCert),(long)60*60*24*days) /设置终止时间X509_set_subject_name(m_pClientCert,X509_REQ_get_subject_name(req)/设置主体名X509_set_pubkey(m_pClientCert,X509_REQ_get_pubkey(req)/设置公钥X509_set_issuer_name(m_pClientCert,X509_get_subject_name(m_pCACert)/设置证书签发者,其中m_pCACert为CA证书文件X509_sign(m_pClientCert,m_pCAKey,digest)/用CA的公钥m_pCAKey对数字证书签名5 将证书写入文件为了方便证书的存储和使用,需要将上一步CA签名后的证书信息写入到文件。另外,还必须存储这个过程中生成的用户的私钥。pbio=BIO_new_file(LPSTR)(LPCTSTR)strFileName,w);PEM_write_bio_PrivateKey(pbio,m_pClientKey,EVP_des_cbc(),(unsignedchar*)(LPCTSTR)strPwd,strPwd.GetLength(),0,NULL)/保存私钥文件pbio=BIO_new_file(LPSTR)(LPCTSTR)strFileName,w);PEM_write_bio_X509(pbio,m_pClientCert)/保存证书文件至此,基于OpenSSL工具包来制作数字证书的过程就已经完成,但具体在程序实现的时候,我们还需加上一些内存处理和释放的函数。另外,为了便于证书的管理,我们还需将证书相关的信息存放到数据库,已备以后使用。4.1.2制作证书撤销列表当发生数字证书的私钥泄密、证书更新、用户要求停止使用证书等情况时,需要吊销用户的数字证书,制作撤销列表,并实时发布。在制作撤销列表时包含以下内容:版本号、签名、颁发者、本次更新、下次更新。如图4-3:图4-3证书撤销列表格式撤销列表的实现过程:首先定义要调用吊销列表时需要的参数结构CRevokecertlist rclist,CRevokecertlist rclistPublic:time_t GetTime_t(int position);char*GetSerialStr(int position);char*GetTimeStr(int position);long GetSerialNumber(int position);void GetErrString(char*pErrStr);int AutoAssemble(_RecordsetPtr pSet,CString SNColName,CStringTimeColName);int GetCount();Int AutoAssemble(_RecordsetPte pSet,);当需要制作撤销列表时,取得对应的参数信息,调用本系统的功能函数MakeCRL(为了系统方便,我们将OpenSSL的撤销列表函数放在一起,用功能函数MakeCRL来调用它)制作证书吊销列表,其具体过程如下:MakeCRL(CString strFileName,CRevokeCertList*prev,long crldays, long crlhours)/本系统定义的功能函数及相应参数申请吊销内容空间:X509_REVOKED*xrev=NULL;STACK_OF(X509_REVOKED)*revoked;revoked=sk_X509_REVOKED_new_null();生成CRL对象:m_pCrl=X509_CRL_new();申请版本号内存空间:(m_pCrlInfo-version=ASN1_INTEGER_new()设置版本号为:2ASN1_INTEGER_set(m_pCrlInfo-version,2)/此处设置版本号为2取得CA名称:issuer=X509_NAME_dup(m_pCACert-cert_info-subject设置更新时间:X509_gmtime_adj(m_pCrlInfo-lastUpdate,0);X509_gmtime_adj(m_pCrlInfo-nextUpdate,(crldays*24+crlhours)*60*60);申请X509_REVOKED内容:xrev=X509_REVOKED_new();ASN1_TIME_set(xrev-revocationDate,t);ASN1_INTEGER_set(xrev-serialNumber,atol(prev-GetSerialStr(it);为CRL签名:X509_CRL_sign(m_pCrl,m_pCAKey,digest)将CRL写入文件:PEM_write_bio_X509_CRL(pbio,m_pCrl)以上就是利用OpenSSL函数库对照证书撤销列表的格式逐步实现证书撤销列表的制作过程,在具体实现的时候还需要加上内存处理函数,另外,为了方便证书的管理,还需要将撤销列表的相关信息写入数据库,以备调用。4.2客户端的实现由设计阶段我们得知客户端子系统可以分为两个模块:证书申请模块和证书使用模块。证书申请模块是终端用户和RA子系统之间的交流工具;证书使用模块是终端用户使用证书的工具。用户登入时,服务器端通过调用C_Name=Request(CountryName)、P_Name=Request(ProvinceName)City_Name=Request(CityName)O_Name=Request(OrgName)ID_Name=Request(ID_Num)P_Name=Request(Passdword)E_Name=Request(Email)取得用户相应的注册信息,若同意用户的注册,服务器端将发送一个ID号给用户,如:Response.Write(User_ID)并将相应的信息插入到数据库。由于用户的基本信息,不属于敏感信息,而用户需要下载的数字证书本身就是签名后的安全信息,所以整个过程不用考虑通信信道的安全。4.3 CA系统运行系统运行界面如图4-4 ,选择好输出路径后,点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 螺旋桩机租赁合同范本
- 荣誉证书制作合同范本
- 运输车辆合伙合同范本
- 美甲物品购买合同范本
- 邢台租赁合同协议模板
- 监控维修补充合同范本
- 羊奶粉供货合同协议书
- 网红定制产品合同范本
- 维修房屋承揽合同范本
- 活动19 关爱社区“空巢老人”教学设计-2025-2026学年小学劳动五年级北师大·深圳报业版《劳动实践指导手册》(主编:韩震)
- 2025年国有企业投资管理制度
- 规范足球训练计划内容
- 公司团建活动总结
- 2025兼职劳动合同简易范本下载
- 2025四川蜀道高速公路集团有限公司招聘工作人员笔试考试参考试题及答案解析
- 2025下半年四川省自然资源投资集团社会招聘考试笔试备考题库及答案解析
- 安全生产监督员考试题库及答案解析
- 读书活动彩排活动方案
- 2025年神经外科手术室护士术前准备与术后护理模拟考核试题及答案解析
- 法学概论(第七版)课件全套谷春德第1-7章我国社会主义法的基本理论-国际法
- 2026年大连职业技术学院单招职业技能考试题库附答案
评论
0/150
提交评论