课程设计个人报告 20165310 徐雯
一、个人贡献
- 设计整体框架,整理所需实现功能
- 根据计划进行程序设计
- 实现程序设计所需代码,并进行调试
- 寻找实现功能过程中所需参考资料并进行学习
二、设计问题与解决方法
- 调用OpenSSL生成用户公私钥依赖于外部环境,我们希望能够实现代替用户生成的功能
- 利用bouncycastle封装的类生成RSA、ECC、SM2的公私钥对
- 为了用户与证书正常使用,所生成的公私钥需要能够在本地保存
- 应该实现B/S还是C/S架构
- 考虑到密钥保存方便选择了C/S架构
- 但是发现参数传递B/S架构更加方便,只是时间来不及调整,如果有机会可以加以改进。
三、调试过程问题与解决方法
- 很少有有关ECC与SM2的证书生成的资料,底层开始实现时间不足且编码过于复杂
- 找到bouncycastle的集成封装,1.57及更高版本实现了SM2的密钥生成与证书生成功能。
- 进行bouncycastle的语法学习,实现CA功能。
- 三种类型的密钥保存在本地并且能够恢复进行使用
- 利用Base64进行编码,生成.key文件并保存在本地。
- 利用bouncycastle包的keyFactory进行解码,publicKeySpec为X509EncodedKeySpec对公钥进行解码,利用privateKeySpec为PKCS8EncodedKeySpec对私钥进行解码。
- 生成ECC证书失败,密钥读取报错
- 调试生成密钥时的代码未完善时生成的ECC的密钥对,存在损坏,重新生成密钥对即可。
- C/S进行Socket传输时,连续传输字节数组或先传送再读取出错。
四、设计体会及收获
- 本次项目还存在很大的不足,由于时间原因有一些细节与功能我们能够做的更好,但是现在只是基本实现其功能,在安全性、保密性等功能与证书存储、更新等存在进一步的思考与改进空间。
- 本次项目我的Java自主编程能力有了提高,学会了CA的Java实现方式,对于CA、PKI、socket传输等有了更深的了解,对于项目架构、系统总体设计与代码具体实现的关系也有了新的体会。
五、参考资料
- 密钥格式转换与保存:
- CSR文件生成
- CA证书签发