基于公钥体制的CA平台设计与实现

2019-01-18 01:10◆陈
网络安全技术与应用 2019年1期
关键词:数字证书公钥密钥

◆陈 超



基于公钥体制的CA平台设计与实现

◆陈 超

(江苏建筑职业技术学院信息传媒与艺术学院 江苏 221116)

本文基于公钥体制的CA平台设计与实现,设计一个具有申请证书、签发证书、作废证书、密钥管理的数字认证平台。主要的目标是通过本文的设计,具体阐述数字证书的签发流程、数据结构、签发算法、非对称密钥具体实现过程,证书作废的关键技术、安全协议的实现方法、非对称密钥加密解密的方法和管理。课题最终目的是开发一个基于SSL协议的数字认证平台,实现申请数字证书、签发证书、更新证书、作废证书和密钥管理的功能;实现数据在安全信道中传输。

公钥体制;CA;SSL协议

0 引言

CA是数字证书认证中心的简称,是一个需要被客户信任的权威签发机构,信任CA的机构对CA所认证的实体也是无条件信任的。21世纪作为信息时代,作为大数据时代,网络安全、信息安全和数据的安全传输的是信息时代和大数据时代的基本保障。数字证书是作为实现网络安全和保护数据资料在网络安全传输的基本工具,对其数据结构,签发流程,签发算法以及签发机构证书进行深入研究。

电子商务正在蓬勃的发展,电子支付是电子商务的核心的技术,保障电子支付安全的手段之一是SSL ,数字证书为SSL协议的核心技术。对CA平台的模拟,对网络安全和数据传输安全的学习和研究,符合电子商务发展的要求,符合计算机科学与技术现在社会的发展趋势。

对数字认证平台的模拟实现能够深层次地剖析数字认证的流程、能够了解数字认证的核心技术、在模拟的过程中也能对数字认证现在的发展趋势以及发展模式有较好的认识。本文最终成果为设计开发一个具备基本功能的数字认证中心的网站,具有前台后台的管理,能够模拟实现数字认证的基本功能。

1 需求分析

需求分析能够让我们在平台设计之前了解平台架构,更好服务于进一步设计与实现工作,以下以数据流图为主线,介绍需求。

实现数据认证中心的主要流程如图1,用户发出证书申请或者证书作废申请,数字认证中心管理员收到用户的申请后,通过审核,发出签发命令或者撤销命令,然后用户从数字认证中心下载数字证书或者已作废的证书。

图1 顶层数据流图

如图2,数字认证中心的主要功能可以分为前台申请和后台审核,用户在数字认证中心的门户网站上提出申请,数字认证中心将用户的申请存储在证书状态表里;管理员可以通过后台审核系统得到用户申请,管理员通过审核后可以发出签发命令或者撤销命令,数字认证中心接受管理员命令有生成数字证书与密钥文件,系统更新证书状态表,将作废证书信息存入作废证书表;用户可以获得数字证书与证书吊销列表。

图2 0层数据流图

如图3,用户通过用户权限管理进行注册申请,把用户信息存入用户权限表;用户查询证书相关信息时,系统根据用户权限表和用户的请求与权限,读取系统的作废证书表与证书状态表,把相应的信息反馈给用户。

图3 申请系统数据流图

图4 审核系统数据流图

2 总体设计

总体设计的阶段将系统需求细化成一个个的功能模块,整个数字认证中心分为用户模块和管理员模块。

2.1 用户模块

通过对数字认证系统的需求分析,可以将基于公钥体制的CA平台功能模块划分为用户模块和管理员模块。

(1)证书申请模块

用户可以申请个人数字证书、安全邮箱证书和安全站点证书,在申请过程中需要填写申请信息。

(2)证书查询模块

用户可以查询个人数字证书、安全邮箱证书、安全站点证书信息,并且可以根据每种数字证书的特点按不同的条件查询证书。对于个人数字证书,可以根据证书持有者人的姓名、邮箱、身份证号码以及证书的序列号查询;对于安全邮箱证书,可以根据安全邮箱的地址、申请人的姓名、身份证号以及证书的序列号查询;对于安全站点证书,可以根据服务器的域名以及证书的序列号查询。

(3)根证书下载模块

要使用该数字认证平台签发的证书,必须先下载该证书认证中心的根证书。

用户个人信息模块:在用户个人信息模块中,提供注册和找回密码的功能;还可以修改该用户已发出数字证书签发的申请,或者撤销申请;用户可以更新已经签发的证书,包括延长证书的使用时期和作废已经签发的证书;用户可以下载证书对应的密钥和修改已签发证书的密钥密令。

查询证书作废模块:在查询证书作废模块中,用户可以查询作废证书的信息和下载数字认证中心所签发的证书吊销文件。

2.2 管理员模块

管理员模块功能描述如下:

(1)签发证书模块

在证书签发模块中,管理员可以签发数字证书,包括生成数字证书密钥、生产数字证书公钥、签发数字证书。

(2)更新证书模块

在更新证书模块中,管理员可以续期证书和作废证书。续期证书只需要对用户的公钥重新签名就可以了;对于作废证书,需要把证书信息发布到系统前台和签发证书作废列表文件,并固改时间更新用户下载的证书作废列表文件。

(3)密钥管理模块

在密钥管理系统中,管理员根据用户的申请可以修改密钥密令。管理员要进入后台管理系统,先经过管理员权限审核,管理员的信息存储在管理权限表里;管理员看到用户的请求后,系统读取证书状态表,管理员发出签发信息,系统将证书信息发到前台;用户收到用户作废请求后,打出作废命令,系统将信息存储到作废表中,并将作废证书信息发到前台。

2.3 信息管理模块

(1)注册

用户申请需填写相关信息,如姓名,电子邮箱,性别,密码,确认密码等。考虑到本系统的会有外国人,会有中间名的情况,注册信息中包含了中间名,但其并非是必填项。

(2)用户登录及忘记密码

对于已经注册过的申请人,可以直接进行登录操作。即填写注册时所用电子邮箱、密码及当前页刷新出的验证码,通过验证后即可进行申请研究生的下一步环节。

(3)基本信息录入

用户需要录入大量信息,其中,包括基础信息、家庭信息、受教育信息、工作经验、和语言能力。

3 详细设计与实现

3.1 数据的安全传输与SSL协议的实现

在设计与开发基于公钥体制的CA平台时,首先应该实现的功能是数据的安全传输。为实现数据的安全传输首先应该实现SSL链接。

(1)安装证书

为建立SSL链接,首先需要一个数字证书,这里直接使用利用keytool生成的自签名的证书,其CN=www.tieshan.com,默认CN选项应该与域名想对应。

(2)域名绑定

由于我们证书的CN=www.tieshan.com,在使用本地服务器时,需要将域名www.tieshan.com绑定到本地主机上,在Windows中打开hosts文件,在电脑的C:WINDOWSsystem32driversetc路径下,如绑定成功打开命令提示符,输入ping www.tieshan.com的命令,命令执行成功,将会看到看到如图5所示。

图 5 命令提示符ping www.tieshan.com命令截图

绑定域名之后输入地址www.tieshan.com:8433之后将正常显示Tomcat服务器的主页面信息,如图6所示。

图6 绑定域名后浏览器显示截图

(3)配置服务器

建立SSL链接,需要将证书信息配置到Tomcat服务器安装目录下的server.xml文件,在我的电脑里D: omcatconf目录下。其配置代码如下所示:

;

protocol="org.apache.coyote.http11.Http11NioProtocol"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="false"

keystoreFile="E:caca.keystore"

keystorePass="123456"

sslProtocol="SSL" />

(4)建立SSL链接

重新启动Tomcat服务器,打开谷歌浏览器,在地址栏里输入https://www.tieshan.com:8443/,就可以建立安全链接了。

3.2 生成密钥与证书

虽然keytool可以直接生成密钥与自签名证书,但我们不仅仅是为了生成密钥与证书,而要把生成密钥与自签名的证书的功能融入到系统中,在生成证书的时候,需要查询用户的申请,然后手动的输入命令提示符命令式不合理的,所以需要设计一个可以自动生成密钥与自签名证书的代码。

(1)实现系统调用

为了能够利用Java代码生成密钥与数字证书,必须能够用Java代码调用keytool工具,而keytool并没有提供能直接被Java调用的接口。但keytool工具可以再命令提示符下利用doc命令执行,而Java语言提供了调用命令提示符的方法。我们可以通过调用命令提示符来实现Java代码控制keytool的目的。

(2)生成密钥

首先,我们把生成密钥与证书的代码放在一个ExportCertFormKeystore类里,生成密钥与证书为这个类的成员方法。我们需要先设计一个方法execCommand(String[] arstringCommand),可以实现系统调用的命令。

其次我们需要利用execCommand(String[] arstringCommand)实现系统调用keytool工具,设计一个生成密钥的方法genkey(int years,String alias,String storefile,String dname,String keypassword)。

(3)生成证书

生成密钥之后,就要根据密钥的信息,通过系统调用,使用execCommand(String[] arstringCommand)调用keytool工具,实现生成证书文件的功能,设计一个生成证书方法为gencert(String storefile,String alias,String certfile,String keypassword)其中参数含义分别是证书的密钥文件路径,证书别名,证书的文件路径,证书的密钥密令。

3.3 签发证书

keytool工具只有生成密钥和自签名证书的方法,并不能签发证书,而要实现证书的签发必须利用java语言提供的有关security的包,这里详细解析一下签发证书的代码。

首先,导入需要应用的到jar包。我们把签发证书的方法放在一个SignCert的类里。

3.3.1签发流程

图7 证书签发程序流程图

如图7所示,证书签发内容在方法Sign(),签发证书的流程为:首先使用getSignCertInfo()获取根证书信息;然后用signCertificate()签发代签名的数字证书;最后使用createNewCertificate()创建和保存签名证书的信息。

3.3.2获取签名证书

使用getSignCertInfo()获取签名信息,如图8所示。

其实现流程为:

(1)定义一个名为 vFin文件流FileInputStream将根证书的密钥文件keystore进行读取;

(2)利用密钥文件的keystore的密令将vFin文件流用用keystore类的成员方法keystore.load(FileInputStream,Stirng)获取密钥库的信息;

(3)然后将密钥库信息转换成X509CertInfo的信息,并将密钥库中的私钥密钥提取出来保存。

图8 获取签名证书信息

3.3.3签发数字证书

图9 签发数字证书程序流程图

签发证书的流程为:

(1)从keytool生成的cer自签名证书中获取被签名证书信息;

(2)将证书转换可以识别的X.509形式;

(3)利用证书类的set方法设置被签名证书的设置有效日期、序列号、签名者、数字签名算法。

然后将证书类保存到指定的文件中去,就实现了签发证书的算法,在基于公钥体制的CA平台设计与开发过程中,把签发算法放到Struts2的Action类中,管理员可以通过读取用户的申请,自行设置证书的主体信息。

3.4 作废证书

在生成作废列表中,仅仅用到jdk中的包是远远不够的,生成作废列表应该是系统重点难点,不仅需要对证书作废列表的数据结构和编码有所了解,更需要熟悉Bouncy Castle 类。

3.4.1生成证书作废列表的流程

(1)根据keytool生成的keystore文件获取私钥与公钥;

(2)将当前时间设置为证书作废时间;

(3)将作废证书的序列号导入证书作废列表中;

(4)用keystore文件里证书签发者的信息对证书作废文件进行签名;

(5)设置证书作废的原因;

(6)将证书作废列表的信息编码保存到crl文件里。

3.4.2更新证书作废列表crl文件

更新证书作废列表即把新的作废证书的序列号以及作废原因导入到证书作废列表文件crl中,理论上一个数字认证中心对外发布一个最新证书作废列表供用户下载就行了。更新证书作废列表crl文件流程如下:

(1)根据keytool生成的keystore文件读取根证书的密钥与证书信息;

(2)根据根证书的密钥里的私钥读取crl文件信息;

(3)生成一个空值的证书作废条目;

(4)将当前时间设置为证书作废时间;

(5)将作废证书的序列号导入证书作废列表中;

(6)设置证书作废的原因;

(7)将证书作废列表的信息编码保存到crl文件里。

3.5 密钥管理

3.5.1 密钥校验

密钥校验过程主要流程为:

(1)首先输入用于校验一个字符串;

(2)将这个字符用getBytes("GBK")取得该字符的GBK编码;

(3)用事先定义的方法从密钥文件中读取私钥信息;

(4)对该字符串的GBK编码用私钥进行加密;

(5)将加密的GBK编码,采用String(GBK)的格式输出;

(6)读取对应证书的公钥信息;

(7)用公钥对私钥加密后的GBK编码进行解密;

(8)将解密后的编码,采用String(GBK)格式输出。

我们比较加密前后的String是否相同就可以校验私钥加密公钥解密的过程。

3.5.2修改密钥密令

修改密钥文件keystore的密钥密令可以通过java.security.cert包直接keystore.load( )和keystore.store( )实现。

4 结束语

本文主要阐述了完成一个功能完整数字认证系统的设计,完成了具有证书申请、证书签发、证书更新、证书查询、证书作废,密钥管理、证书作废功能的数字认证系统。数字认证系统是一个关乎网络安全的核心系统,网络安全在日常的商用领域,关系到每个网名的的切身利益;在军事领域,尤其是现在信息技术用户军事领域的,高科技军事时代,网络安全问题关系到一个国家的命运。虽然现在只是初步的模拟数字认证系统的基本功能,但相信当拥有了自己的开发团队,具有一定的开发的所需要物质基础,必定能为国家的网络安全作出自己的贡献。

[1]梁栋.Java加密与解密的艺术[M].北京:机械工业出版社,2010.

[2]薛天龙.数字证书原理以及应用方法指南[M].北京:中国标准出版社,2014.

[3]陈路. 基于代购网站多种支付的研究与实现[D].东华大学,2014.

[4]殷腾飞.DRM系统中PKI部分的研究与设计[D].华东理工大学,2014.

[5]郑丽娟.身份与位置分离网络中认证协议的研究与设计[D].北京交通大学,2014.

[6]Han-Ul Jang,Heung-Kyu Lee. Biometric-PKI Authentic ation System Using Fingerprint Minutiae[J].Journal of Computer and Communications,2014.

[7]柴国杰.基于数字证书认证的IPSec VPN研究与应用[D].山东大学,2012.

[8]Ian Phau,Aaron Lim,Johan Liang,Michael Lwin.Engaging in digital piracy of movies:a theory of planned behaviour approach[J].Internet Research,2014.

猜你喜欢
数字证书公钥密钥
幻中邂逅之金色密钥
幻中邂逅之金色密钥
密码系统中密钥的状态与保护*
创建KDS根密钥
神奇的公钥密码
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究
PKI技术在SSLVPN中的应用
数字签名保护Word文档
一种公开密钥RSA算法的实现