2020_1课程设计—基于BC的证书格式转换工具的设计与实现—个人报告
自己的贡献
- 收集相关资料,学习证书格式的相关知识
- 收集相关资料,学习OpenSSL的使用方法
- 安装OpenSSL
- 使用OpenSSL命令行查看证书,并实现证书格式转换
- 收集相关资料,学习BouncyCastle的使用方法
- 使用BouncyCastle编程实现证书格式的转换
- 对项目代码进行优化,消除代码冗余重复情况,增加输入边界控制
- 设计编写网页,将输入测试移到前端进行,形成一个证书转换系统
列出设计中遇到的问题及解决方法
1、 Q1:使用BouncyCastle编程的时候,网上资料也很少,很多地方都不知道如何下手
A1:因为BouncyCastle是一个第三方库,所以直接查看相关源码,在小组组长的帮助下才完成了项目代码
2、 Q2:写完项目代码之后,发现很多地方写的很冗余,重复的地方很多,完全没有达到“高内聚,低耦合”,而且很多地方写的都很“固定”,比如文件名直接嵌到代码里,不能动态输入等等。
A2:对代码进行优化,将读证书和写证书分别写成一个类,实现动态输入文件名,并加入文件名的边界测试
3、 Q3:制作图形化界面的时候,不知道应该把文件等输入的测试放到前端进行,还是后台检测
A3:查看了其他网页,发现基本都是一点击某个按钮,如果输入信息有误,就很弹窗报错,因此我把输入检测全部移到前端进行。
列出调试过程中遇到的主要问题,并说明解决方法
1、 Q1:在使用OpenSSL进行整数格式转换的过程中,出现不能加载根CA私钥的问题
A1:
- 使用命令
openssl rand -writerand .rnd
,查看openssl.conf
配置信息,里面有定义证书的存放位置; - 需要使用
vim /etc/pki/tls/openssl.cnf
编辑配置文件,修改../../CA
为/etc/pki/CA
就解决了。
2、 Q2:制作网页时候,使用form表单进行前端后台数据交互,检查过XML文件,但是还是数据无法交互
A2:
- 我发现form表单中有一个属性
enctype="multipart/form-data"
,是一种用于上传文件的表单,是设置表单的MIME编码。 - 默认情况,这个编码格式是
application/x-www-form-urlencoded
,不能用于文件上传; - 只有使用了
multipart/form-data
,才能完整的传递文件数据。 - 但是设置了
enctype="multipart/form-data"
,除了file类型表单能获取到,其他value通过request.getParameter
都得不到。 - 这种情况下我们可以利用组件来解决该问题,例如用
jspsmartupload
组件:
com.jspsmart.upload.SmartUpload su = new com.jspsmart.upload.SmartUpload();
su.initialize(pageContext);
su.service(request, response);
su.setTotalMaxFileSize(100000000);
su.setAllowedFilesList("zip,rar");
su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
su.upload();
String Name = su.getRequest().getParameter("Name");
String TYPE_ID = su.getRequest().getParameter("Type");
- 通过
su.getRequest().getParameter("value")
;就可以了,su.upload()好象必须放在前面,测试中将su.upload()放在获取参数后面不成功。
设计体会及收获
- 完成项目代码的时候,发现自己已经好久没写过java代码了,把自己学的全还给老师了,因此大量查了Java API,查看相应类的使用方法,才勉强实现项目。但是写完之后代码简直不能看,全都是冗余重复,同一个部分写了好多次,完全没达到“高内聚低耦合”,在和其他组员沟通协调之后,这才一起将代码优化。在完成网页的过程中,也是频频暴露问题,这就暴露了当时网络编程的知识漏洞和记忆盲点,查阅大量资料才实现前端后台数据连接。
- 通过本次课设,捡起了之前学的知识,理论实践相结合,巩固了知识体系,虽然在过程中遇到了很多问题,但是我认为就是在发现问题解决问题这个过程中进步的,在做中学习到知识,就是娄老师常提的“做中学”。