前言
本文是哈工大17级密码学原理与实践课程的实践部分(CA证书认证系统)实验报告,由于本实验代码中包含了数据库部分,每个人的电脑配置环境也不一样,所以,提供的参考代码不会直接运行成功,但给大家提供了写实验的一些思路。本实验报告是最终版,非常详尽。
本文仅供参考。希望各位学弟学妹认真对待实验,在学习时间充足的情况下,借此大大提高自己的编程能力。
代码下载地址:哈工大密码学实验(CA证书认证系统)
以下正文。
1. 背景与意义
CA认证系统,即CA证书颁发系统,是公钥基础设施(PKI)中的核心环节,是公钥加密过程中的第三方权威认证方,负责密钥和证书的产生、发布、管理、存储和撤销等功能,广泛用于电子商务等需要非对称加密的信息传输场景中。所有通过CA的信息传输方,都要无条件的信任CA的公正性,在消息传输的过程中,CA为信息传输的双方提供公私钥加密环境,提供身份认证、安全传输、不可否认性和数据完整性等功能。
公钥基础设施PKI( Publie Key Infrastrueture, 简称PKI)是利用公钥理论和技术建立的提供安全服务的基础设施, 是信息安全 的核心,也是电子商务安全的关键所在。PKI技术采用证书管理公钥, 通过第三方的可信任机构—认证中心CA(Certificate Authority),把用户的公钥和用户的其他标识信息(如名称、E-mail、身份证号等)捆绑在一起,在Internet上验证用户的身份(其中认证机构CA是PKI系统的核心部分)。目前, 通用的办法是采用建立在PKI基础之上的数字证书,通过把要传输的数字信息进行加密和签名,保证信息传输的机密性、真实性、完整性和不可否认性,从而保证信息的安全传输。
2. 国内外应用现状
美国是最早提出PKI概念的国家,并于1996年成立了美国联邦PKI筹委会。与PKI相关的绝大部分标准都有美国制定,其PKI技术在世界上处于领先地位。2000年6月30日,美国总统克林顿正式签署美国《全球及全国商业电子签名法》,给与电子签名、数字证书以法律上的保护,这一决定使电子认证问题迅速成为各国政府关注的热点。加拿大在1993年就已经开始了政府PKI体系雏形的研究工作,到2000年已经在PKI体系方面获得重要进展。加拿大与美国代表了发达国家PKI发展的主流。
欧洲在PKI基础建设方面也成绩显著。已颁布了93/1999EC法规,强调技术中立、隐私权保护、国内与国外相互认证以及无歧视等原则。为了解决各国PKI之间的协同工作问题,他采取了一系列策略:如积极自主相关研究所、大学和企业研究PKI相关技术;自主PKI互操作性相关技术研究,并建立CA网络及其顶级CA。并于2000年10成立了欧洲桥CA指导委员会,于2001年3月23日成立欧洲桥CA。
我国的PKI技术从1998年开始起步,由于政府和各有关部门近年来对PKI产业的发展给予了高度重视,2001年PKI技术被列为”十五“863计划信息安全主题重大项目,并于同年10月成立了国家863计划信息安全基础设施研究中心。国家计委也在制定新的计划来支持PKI产业的发展,在国家电子政务工程中明确提出了要构建PKI体系。目前,我国已全面推动PKI技术研究于应用。
1998年国内第一家以实体形式运营的上海CA中心(SHECA)成立。目前,国内的CA机构分为区域型、行业型、商业性和企业型四类;截至2002年底,前三种CA机构已有60余家,58%的省市建立了区域CA,部分部委建立了行业CA。其中全国型的行业CA中心有中国金融认证中心CFCA、CTCA中国电信认证中心等。区域型CA有一定地区性,也称地区CA,如上海CA中心、广东电子商务认证中心。
3. 需求分析
3.1 总体需求
(图片略)
3.2 功能需求
本次实验中,CA的功能需求主要有如下几点:
-
接收验证用户数字证书的申请
为了实现接收验证用户数字证书的申请,需要用户向CA提供自己的身份信息,并提供申请机构的相关有效信息。
-
生成证书
要生成一个证书,需要设计好证书的内容以及格式。
-
存储证书
要存储一个证书,需要设计好证书的存储形式,以及是否需要加密。
-
向申请者颁发(或拒绝颁发)数字证书
向申请者颁发数字证书,需要设计好如何想申请者颁发证书,颁发过程中是否需要加密传输。在这为了模拟CA的功能,将不实现拒绝颁发功能。
-
接收用户的数字证书的查询、撤销
需要设计好数字证书的查询和撤销需要哪些权限,用户需要提供哪些信息来进行查询和撤销。
-
产生和发布证书的有效期
需要设计好如何为用户产生证书的有效期,有效期的时长选择以及如何发布有效期。
-
数字证书的归档
需要设计好如何将数字证书归档,是以数据库的形式还是以文件的形式。
-
密钥归档
同数字证书的归档。
3.3 性能需求
本CA系统未考虑网站性能需求。
3.4 技术选型
- html+css+javascript
- jdbc+druid+mysql+beanutils
- jquery+jstl+standard
- dom4j
- jsencrypt.min.js+sha256-min.js
4. 概要设计
围绕着需求分析,将展开如下设计:
-
接收验证用户数字证书的申请
- 用户登录CA认证系统(前端主页),如有必要,进行注册
- 用户进入申请证书功能,输入组织结构、工商注册号、法人姓名、经办人姓名、经办人电话等信息,在“1年”、“2年”、“3年”中选择一项作为证书的有效期,并上传好本地的公钥文件后,点击提交按钮。
- 后台处理用户的登录信息,将这些信息归档后,生成证书。
-
生成证书
生成证书完全是后端的内容,用户在提交证书申请的相关信息后,由服务器在后台处理相关信息,并生成固定格式的
.mycer
证书文件。 -
存储证书
证书一律以文件的形式存储在
D:\DriveY\IntelliJ\cryptotw2\out\artifacts\cryptotw2_Web_exploded\download
路径下。在数据库中,证书以如下形式字段存储相关信息。
-
向申请者颁发(或拒绝颁发)数字证书
- 用户登录CA认证系统后,进入下载证书功能
- 用户输入要下载证书的序列号
- 服务器通过浏览器向用户发送一个证书文件,完成证书的颁发。
-
接收用户的数字证书的查询、撤销
- 查询
- 用户登录CA认证系统后,进入查看证书功能
- 用户可以查看所有组织机构的证书(包括已撤销的证书),并且可以下载
- 撤销
- 用户登录CA认证系统后,进入撤销证书功能
- 用户输入要查询证书的序列号和该证书登记时的用户密码
- 后台处理,验证无误后,该证书被成功撤销,撤销信息在CRL库中登记。
- 查询
-
产生和发布证书的有效期
证书的有效期为从证书制作时间起,1年/2年/3年止,时限由用户在申请证书时选择。
-
数字证书的归档
数字证书的归档一律以文件的形式在
D:\DriveY\IntelliJ\cryptotw2\out\artifacts\cryptotw2_Web_exploded\download
路径下。详细信息以字段形式保存在数据库中。 -
密钥归档
密钥(申请人的公钥)一律以文件的形式保存在
D:\DriveY\IntelliJ\cryptotw2\out\artifacts\cryptotw2_Web_exploded\upload
路径下。密钥内容不会在数据库中保存。
5. 细节设计
本部分,细节设计报告说明将以逐个功能、技术要点的形式呈现,逻辑实现请参见Java doc文档。
本实验使用的前端模板取自 大气黑色注册表单html5模板。包括首页在内,有相当部分的css代码经本人亲手改造后呈现。
由于某些界面不能够全部展示,将以一定比例的缩放给出界面贴图,可能存在贴图比例失衡的情况。
由于撰写报告时,仍有些功能正在调试,同一功能的前后贴图可能存在不一样的地方。
加密部分和数据结构部分将在小节中集中体现。
5.1 登陆/注册界面
登陆界面中有一个标题和一个container
面板,面板中左半部分是登录部分,右半部分是注册部分,上图中,“记住我“,”忘记密码?“和”其他方式登录“功能都是无效的。
5.1.1 注册
用户注册需要输入用户名、密码、身份证等信息,需要满足以下几个条件:
- 用户名必须为字母、数字、下划线、减号的组合,长度为6~16位
- 密码至少包括数字和字母,长度至少为6位,至多20位。
- 身份证信息必须满足中华人民共和国居民18位身份证号要求
在用户输入合法信息并点击注册后,相关信息会经过加密存入到数据库的ra_user
表中:
注意,此处为了演示,保留了一个用户名为shen
,密码为123
的简单用户,实际上这个用户的用户名和密码是非法的,不能被注册。
5.1.2 登录
用户登录需要输入用户名、密码信息,用户名和密码必须属于同一用户。后台将从数据库中提取注册密码密文和盐值,对用户输入的密码加密后与密文比对,如果匹配成功,则验证登陆成功。
5.2 主页面
主页面涉及两个部分,一个是置于页面顶端中间的用户登录状态,以及页面中间的container
面板。
5.2.1 用户登录状态(Filter)
其实最开始的时候没有做这个功能,后来才考虑到加进去的。记录用户登录状态的意义在于,一个是要保证所有访问本网站的用户,都必须登录后才能访问网站内的资源(主要指除了登录/注册页面的其它页面),另一个是记录此时用户的登录状态,将证书和申请时的登录用户关联,以便在撤销证书时,必须输入证书申请时的用户的登录密码,起到了验证身份的作用,限制了撤销权限。
后面的页面在这个位置都会有用户登录状态,不再赘述。
5.2.2 主操作面板
主操作面板中一共包括6个功能:
- 申请证书
- (下载)密钥生成器
- 下载证书
- 撤销证书
- 下载 CRL(证书撤销列表)
- 查看证书(包含下载功能)
5.3 申请证书
申请证书页面包括一个container
,其中有用户申请证书需要提交的表单。该表单包括:
- 组织机构
- 工商注册号
- 法人姓名
- 经办人姓名
- 经办人电话
- 有效期(1年/2年/3年)
- 密钥文件
其中,组织机构、工商注册号、法人姓名、经办人姓名、经办人电话,为了简单起见,都没有做拼写检查或合法性检查,有效期只能三选一,密钥文件从本地上传(该文件应该是本网站提供的密钥生成器genkey.exe
生成的公钥文件)。
5.4 密钥生成器
点击密钥生成器后,马上从浏览器获取一个genkey.exe
文件,运行该可执行程序将在与该文件所在路径同级的目录下生成两个文件pk.key
和sk.key
。前者为公钥文件,后者为私钥文件,两者共同组成一对 1024bits 的 RSA 公私密钥对。
5.5 下载证书
下载证书页面非常简单,只需要输入要下载的证书序列号,就可以从浏览器获取相应的证书文件。
5.6 撤销证书
撤销证书页面也非常简单,只需要输入要下载的证书序列号,并且输入相应的撤销身份验证密码,就可以成功撤销该证书。证书被撤销后不会从证书库中删除,但会加入到 CRL 库中。
撤销身份验证密码指的是证书在申请时,正在操作的用户的登录密码。这样设计虽然比较简单,但是限制了撤销权限,将撤销功能与用户登录状态相关联,由于证书序列号是(对所有人)可见的,所以限制请求者只有知道证书申请时的登录密码,才可以撤销成功。
其实大型公证CA系统的证书的申请和撤销都是比较严谨的工作,通常需要多方核实,并且在一到三个工作日内给出证书的申请和撤销反馈。本次实验中,申请和撤销都是自动化的,对于证书的申请没有加权限,证书的撤销也只加了登录密码的权限限定。
5.7 下载 URL
点击下载 CRL会直接从浏览器获取一个 CRL 文件,CRL文件的具体结构将在数据结构小节中介绍。
5.8 查看证书
查看证书功能将数据库certificate
表中的信息抽取出来,分页展示在前端网页。前端展示提供了证书的序列号、组织机构、工商注册号、证书有效期起、证书有效期止信息,并提供了一个下载链接,单机该链接可以直接获取到该证书文件。
此时数据库中只有两条记录,为了方便展示,所以在这里设计成每页只有一条记录。
5.9 数据结构设计
5.9.1 证书
证书的设计是本次实验CA系统的重头戏,现在互联网上比较流行的证书为X.509结构。