信息安全课程设计报告CA系统.Word文档下载推荐.docx

上传人:wj 文档编号:892942 上传时间:2023-04-29 格式:DOCX 页数:47 大小:172.83KB
下载 相关 举报
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第1页
第1页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第2页
第2页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第3页
第3页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第4页
第4页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第5页
第5页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第6页
第6页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第7页
第7页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第8页
第8页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第9页
第9页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第10页
第10页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第11页
第11页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第12页
第12页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第13页
第13页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第14页
第14页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第15页
第15页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第16页
第16页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第17页
第17页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第18页
第18页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第19页
第19页 / 共47页
信息安全课程设计报告CA系统.Word文档下载推荐.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

信息安全课程设计报告CA系统.Word文档下载推荐.docx

《信息安全课程设计报告CA系统.Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《信息安全课程设计报告CA系统.Word文档下载推荐.docx(47页珍藏版)》请在冰点文库上搜索。

信息安全课程设计报告CA系统.Word文档下载推荐.docx

于是数字证书应运而生,数字安全证书提供了一种在网上验证身份的方式。

安全证书体制主要采用了公开密钥体制,其它还包括对称密钥加密、数字签名、数字信封等技术。

数字证书的加密机制保证了信息的保密性,数字签名等技术保证了数据的不可修改性,认证机制保证了交易的不可否认性。

虽然之前在密码学课程学习中有接触过有关数字证书的知识,但是大部分内容已变得生疏,所以在准备阶段,我就先去学校的图书馆浏览一些相关电子资源,以及借阅了张明徳和刘伟写的《PKI/CA/数字证书技术大全》,打算使用Java语言编写,顺便借阅了叶乃文写的《Java语言程序设计教程》,从以往的硕士论文中可以知道,关于CA系统的设计见仁见智,不过总体上已实现了大体上的自己充当颁发机构进而进行数字证书的颁发。

本次课程设计,在已实现的技术基础上进行功能、数据传输上的完善,在Java的keytool中生成颁发机构的keystone以及颁发者的数字证书,然后将颁发者的信息加载,用自己的私钥对提交的用户信息以及公钥进行签名,生成数字证书并颁发给用户。

在用户信息的提交的过程中,会先对用户身份进行身份认证,在验证用户身份合法之后,才对用户进行签名,然后再保存用户的信息到数据库中。

另外,在CA系统的设计过程中,考虑到用户因可能因丢失公钥而造成损失,所以基于这个隐患而添加了一个用户证书挂失的功能,这样就能在很大的程度上减少用户的损失。

在挂失之前会首先核对挂失者的身份是否合法,防止别人恶意的挂失行为,而且,已经挂失的会弹出错误提示,避免重复挂失。

在挂失之后会把公钥存入到不受信任的公钥数据库中,当用户再次使用该公钥时会也会弹出错误提示。

而且,本次CA系统设计中一个人是可以使用多个验证信息申请多个用户证书的,这样就提高了数字证书用途的广泛性,而不必受限于数字证书在不同领域上的使用。

2.系统分析

2.1系统需求

首先,我们先来看一下静态口令身份认证方式的的安全隐患:

(1) 口令容易遗失

用户名、口令在应用系统中以明文方式传输,容易被截取,造成口令遗失,还有输入口令时被窥视造成口令遗失:

用户名、口令存在数据库中,非法用户可以通过进入数据库获取口令信息。

(2) 遗失不容易察觉

用户口令遗失后,自己并不知道,不会采取措施防范遗失后可能造成的损失。

(3) 大量口令需要记忆(不易保管)

如果存在多个应用系统,可能存在多组用户名、口令,不方便记忆。

然而,在使用数字证书代替传统静态口令身份方式具有以下优势:

(1) 权威性:

数字证书设备由CA中心颁发,使用其作为身份识别设备局域哦很高的权威性:

(2) 不可伪造型:

数字证书设备经过国家相关部门审核批准,设备中保存的用户私钥无法被读岀,不可伪造:

(3) 不容易被冒用:

使用证书需要同时持有数字证书设备和设备启动口令,缺一不可,因此只要保护好证书设备,他人无法冒用用户身份:

(4) 不可破解:

数字证书设备具有口令保护机制,在连续输入错误一定次数后,设备将锁定,防止暴力破解:

(5) 容易保管:

数字证书设备形状与普通U盘相似,方便携带保管,不易遗失;

(6) 遗失容易发现:

万一数字证书设备遗失,能够及时发现,并采取相应措施。

根据以上分析,选择使用数字证书的身份模式,能够极大的提高用户身份的安全性,保障应用系统用户身份安全。

和传统”用户名+口令”应用模式,CA具有高强度的通讯方式,能够实现传输数据的安全保障,是通过数字签名技术实现,通过签名验证确定数据传输和存储的完整性,因为只有授权用户才能进行解密并使用,所以保证了数据的机密性:

另外,这是通过数字签名技术实现的,因此用户不得否认签名操作,即不可否认性。

本次课程设计是实现一个简单的CA颁发系统,基本要求如下:

(1) 利用Java中的keytool生成的Keystore和CA证书来充当可信任的CA颁发机构,CA颁发机构本身是存储有一定的用户的认证信息的,然后接受用户的认证请求,通过用户的认证信息可以判断申请用户是否合法或者用户的公钥是否已申请注册过;

(2) 认证通过后开始接收用户信息和用户自己产生的PublicKey

(3) 接收完成后,先通过加载CA数字证书获得CA颁发机构的信息以及CA的私钥,然后对接收到的用户信息和公钥进行打包即数字签名,生成数字证书并颁发给用户,安全储存用户信息:

(4) 数字证书吊销:

这里是通过将用户需要挂失的公钥存入到不受信任的公钥数据库中,这样,该密钥将被作废;

在挂失前会对挂失用户进行身份验证,防止恶意挂失行为,验证通过后还要访问一下不受信任的公钥数据库中是否已存在该公钥,若已存在则弹出错误提示;

若不存在,则进行公钥挂失过程。

挂失之后,当用户再次使用到该公钥认证时会弹出错误提示。

2.2数据库连接

NavicatforMySQL是一套专为MySQL设计的高性能数据库管理及开发工具。

它可以用于任何版本3.21或以上的MySQL数据库服务器,并支持大部份MySQL最新版本的功能,包括触发器、存储过程、函数、事件、视图、管理用户等。

点击或选择文件-〉新建连接来设置连接属性。

连接设置:

在创建连接后,你可以连接到数据库,管理它的对象、表中的数据等。

请看下面的帮助,以了解如何用最简单的方法运行这些操作。

与数据库或模式工作:

与数据库或模式的对象工作Navicat浏览器!

Navicat窗口包括一个导览窗格(左边的窗格)及一个对象窗格(右边的窗格)。

导览窗格一个是导览连接、数据库及数据库对彖的基本途径。

它采用树状结构,让你透过弹出菜单快捷及方便地使用数据库和它们的对象。

对象窗格显示开启表、査询等。

在窗口顶部的工具栏提供其他控制项,你可以用它来操作你的数据。

navicat如何连接mysql:

1、 首先你电脑上必须安装了mysql的数据库。

(如果你不淸楚自己是否已经安装成功mysql,你可以在开始菜单输入“mysql”,进行搜索)

2、 打开你的NavicatforMysql(这里也可以使用上面的方法,在开始菜单搜索框中输入'

navicat'

3、 打开后单机工具栏左边第一个'

connection'

进入连接页面。

3

4、 最重要的一步:

打开的界而有五个框需要输入,第一个:

connectionName需要输入的是你新建的连接的的名字,这里我们就命名为'

localhost'

第二个:

HostName/IpAddress你需要输入的是你本机的ip地址或者直接输入”localhost”,这里我们选择第二种。

第三个:

Port,输入你安装时候的端口号,一般为默认的3306:

第四个和第五个分別为:

UserName和Password,意思为你需要输入你数据库名用户名和密码,我的用户名是:

root,密码:

最后把下而那个'

SavePasswod'

的小框框给勾上。

5、 完成上面步骤,然后点击左下角有个'

testConnectiion'

如果弹岀success,恭喜你直接点击右下角的'

save'

按钮就可以了。

如果弹出error,你则需要再重新仔细查看自己哪里填错了。

6、 点击4save后,你就可以双击“本地”(这里的'

本地’是你刚才输入的connectionName),然后打开你的数据库了。

2.3功能需求

用户证书信息设计:

数字证书的主要思想是实现对于合法用户信息的数字签名并生成数字证书,然后颁发给合法用户,所以对于数字证书生成之前需要设计如下信息:

(1)版本(Version)

版本信息,这个是证书的版本号,不同版本的证书格式是不同的(版本1、版本2、版本3)。

这里我用的是V3版本。

(2)序列号(SerialNumber)

证书序列号,同一身份验证机构签发的证书序列号是唯一的,这就是数字证书的不可否认性。

(3)颁发者(Issuer)

颁发者,也就是CA颁发机构,指岀这个证书是由谁颁发的:

如果是自己所在机构生成的,比如自己所在的公司,那么颁发者就是自己的公司。

(4)签名算法(SignatureAlgorithm)

签名算法,指的是对数字证书进行签名的时候所使用的算法,可以根据颁发者的公钥进行解密。

(5)使用者(Subject)

使用者就是证书的持有者,可以是个人、公司、企业、网站等等需要认证自己身份的个体或者集体。

(6)有效期(Validformbegin_datetoend_date)

证书的有效期就是证书所允许使用的期限,当数字证书过了有效期将无效,即对于用户身份的认证将无效,这就需要重新申请数字证书方能进行通倍或者交易。

(7)公钥(PublicKey)

证书的公钥,主要是用来对消息进彳亍加密的,这个证书的公钥是2048位的,他的值可以在对话框中看到,是很长的一段十六进制数。

(8)指纹和指纹算法

指纹以及指纹算法,在证书发布的时候,发布机构会根据指纹算法先计算出整个证书的hash值,并使用证书发布机构的私钥对其进行签名构成一个指纹,并将指纹与该证书放在一起。

构建自签名证书:

申请数字证书之前,需要在密钥库中以别名的方式生成本地数字证书,建立相应的加密算法,密钥,有效期等信息。

keytool-genkcypair-keyalgRSA-keysize2048-sigalgSHAlwithRSA-validity

3600-aliasserver-keystoreserver,keystore

各参数含义如下:

-genkeypair-keyalg-keysize-sigal-validity-alias-keystore

表示生成密钥对

指左密钥算法,这里是RSA

指定密钥长度,默认1024,这里指左2048

指定签名算法,这里是SHAlwithRSA指定有效期,单位为天

指定别名

指怎密钥库存储位置

这里我输入参数作为密钥库的密码,也可通过参数-storepass指左密码。

注意:

一个keystore应该是可以存储多套<私钥-数字证书〉的信息,通过别名来区分。

通过实践,调用上述命令两次(别名不同),生成同一个keystore,用不同别名进行加密解密和签名验签,没有任何问题。

经过上述操作后,密钥库中已经创建了数字证书。

虽然这时的数字证书并没有经过CA认证,但并不影响我们使用。

我们仍可将证书导出,发送给合作伙伴进行加密交互。

keytool-exportcert-aliasserver-keystoreserver,keystore-fileserver,cer-rfc

各参数含义如下:

-exportcert-alias-keystore-f订e-rfc打印证书

表示证书导出操作

指定密钥库文件

指定导出证书的文件路径

指左以Base64编码格式输岀

keytool-printcert-fileserver,cer

2.4开发环境

运行系统:

Windows10

开发环境:

eclipse,NavicatforMySQL

基于eclipse编程软件对CA系统的设计与实现

MySQL安装教程:

1、 把mysql-5.7.19-winx64.zip压缩文件解压到D:

\目录下:

2、 在D:

\mysql-5.7.19-winx64目录下新建my.ini配置文件:

3、 用文本编辑器或其他编辑器打开my.ini文件,把以下代码复制粘貼进去,保存退岀:

#代码开始

[Client]

#设置3306端口

port-3306

[mysqld]

#设置mysql的安装目录

basedir=D:

\mysql-5.7.19-winx64

#设置mysql数据库的数据的存放目录

datadir=D:

\mysql-5.7.19-winx64\data

#允许最大连接数

max_connections=200

#服务端使用的字符集默认为8比特编码的latinl字符集character-set-server=utf8

#创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysql]

#设置mysql客户端默认字符集

defaulL-character-set=utf8

#代码结束

4、配置环境变屋;

4.1、 新建系统变量MYSQLJIOME,并配置变量值为D:

\:

4.2、 编辑系统变量Path,将;

%NYSQL」OHE%\bin添加到Path变量值后面。

6

5、以管理员身份运行命令提示符cmd(—宦要用管理员身份运行,不然权限不够);

5.1、 使用dos指令,进入D:

\mysql-5.7.19-winx64目录,运行以下指令

mysqld—defaults-file=my.ini—initialize-insecure

mysqld—install

netstartmysql

5.2、 设置mysql的root密码,运行以下指令

mysql-uroot-p

usemysql;

updateusersetauthentication_string=password(,)whereuser=,root5;

flushprivileges;

exit

安装到此完成。

3.详细设计

3.1系统设计框架

首先,用Java的keytool生成Keystore和CA证书,实现自我的签发,然后开始监听用户的信息传送,当用户通过验证并把用户信息和用户的公钥进行签名,然后对用户信息进行封装,生成数字证书,并保留用户信息,最后就是验证数字签名。

如果用户公钥丢失需要挂失,用户需要先验证自己的身份,通过验证才可以进行挂失:

如果公钥已经挂失,则挂失失败。

具体的结构设计如下图:

CA系统

挂失

申请

身份认证

数字签名

保存信息

验证签名

生成证书

身份验证

吊销证书

图3-1CA系统模块图

22

本次课程设计涉及到了主界而的设计,具体的系统包括内部的程序设计以及运行界面的设计,内部的程序主要是将界面输入的数据接收,而且需要连接数据库进行用户信息的验注,以及证书的吊销:

然后在后台进行用户信息的处理,包括数字签名以及封装数字证书,最后把扫描数字签名的结果放主界而显示,其内部程序运行的流程图如下图:

9吊销证书<

—— 申请证书

Yes

图3-2CA系统流程图

3.2界面设计

本程序的界面设计主要是显示数字签名以及保存的结果,以及将用户信息存入到数据库中。

申请证书之前需要设置用户信息,然后单击申请按钮,即可进行证书申请,最后在中央窗体的状态显示区中显示数字签名的结果,签名完成后用户可以继续进行挂失申请或者直接退岀界面。

Swing提供了三个通用的顶层容器类JFrame,JDialog和JApplet。

JFrame提供了基于窗体的应用程序,JDialog提供对话框形式的界面,JApplet提供Java小应用程序的界面形式。

在顶层容器下是中间容器,用于容纳其他的组件。

通常窗格本身在显示界面中是看不到的。

面板类Panel是一种中间容器,它的唯一作用是使组件更容易定位。

顶层容器通过getContentPane0方法获取内部的一个内容窗格。

(1)常用S叭ng组件:

①文本区:

JTextArea

②按钮:

button

③标签组:

JLabel

④文本字段:

JTextField

(2)主机IP而板实现(其他类似):

jContentPane=newJPanel();

jContentPane.setLayout(null);

jContentPane.add(ipHostLabel,null);

(3)标签(JLabel)

用来显示文字,图标(可以文字与图标同时显示)。

JLabel构造方法

JLabel0 创建一个空标签

JLabel(Stringc) 指定标签文本

起始端口标签的设计如下(其他类似):

jbPortLabel=newJLabel();

jbPortLabel.setBounds(newRectangle(228,10,65,28));

jbPortLabel.setText(”起始端口:

”);

(4)文本区域倍息添加函数:

publicstaticvoidappendTextArea(Strings){

jTexlArea.append("

\n"

+s+"

);

}

(5)单行文本框(JTextField)

构造方法

JTextFieldO

JTextField(intcolumns) 指定宽度

JTcxtField(Stringtext) 指定初始化文本

JTextField(Stringtext,intcolumns)

编辑框函数设计如下(其他类似):

privateJTextFieldgetJHostTextFieldO{

if(jHostTextField==null){

jHostTextField=newJTextField;

jHostTextField.setBounds(newRectangle(105,10,110,26));

returnjHostTextField;

(6)按钮的创建

构造方法:

JButtonO

JButton(Stringc) 指定显示文本

JButton(Iconimage) 指定显示图标

JButton(Stringc,Iconimage)

申请按钮函数实现(保存按钮类似):

privateJButtongetConnJButtonO{

if(okJButton=null){

okJButton=newJButtonO;

okJButton.setBounds(newRectangle(300,145,97,26));

okJButton.setText(*申请"

okJButton.addActionListener(this);

returnokJButton;

(7)多彳亍文本框(JTextArea)

JTextArea()

JTextArea(introws,columns)

JTextArea(Stringtext)

指定尺寸

指怎初始化文本

JTextArea(Stringtext,introws,intcolumns)

常用设置方法

publicvoidsetLineWrap(booleanwrap):

换彳亍状态设置

publicvoidsetRows(introws):

设置行数

publicvoidsetColumns(intcolumns):

设置列数

说明:

颜色、字体、内容的设置同上(setForegroundxsetFont、setText)文本显示框代码设计如下:

privateTextAreagetJTextAreaO{

if(jTextArea=null){

jTextArea=newTextArea():

jTextArea.setEditable(false);

jTextArea.setBounds(newRectangle(15,180,580,205));

returnjTextArea;

(8)初始化界面函数实现:

privatevoidinitializeOthrowsIOException{

this.setSize(720,440);

this.setContentPane(getJContentPane());

this.setTitle(*MyCertificate(Vl.0)ByGan"

this.setDcfaulLCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

3.3主要代码

数据库的连接(査找删改略):

static{

driverClass="

com.mysql.jdbc.Driver"

;

url=*jdbc:

mysql:

//localhost:

3306/mydb*;

user="

root"

password="

”;

try{

〃通过字节码对象方式加载静态代码块

〃从而注册驱动程序

Class.forName(driverClass);

}catch(ClassNotFoundExceptione){

System,out.printIn(”无法创建实体"

);

e.printStackTraceO;

}}

publicstaticConnectionget

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2